簡體   English   中英

具有Ienumerable模型的Asp.net MVC視圖在提交時返回null

[英]Asp.net mvc view with Ienumerable model returns null on submit

我正在學習mvc並嘗試填充復選框列表並在提交按鈕上獲取復選框列表的所有選定值,但發布后在控制器中的按鈕提交上得到空值.view和controller的代碼如下。 httpget部分運行正常,並根據需要顯示所有復選框。 但提交后出現問題

查看:

 @model IEnumerable<MVCExtra.Models.paymentmethod> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> @using(Html.BeginForm("Index", "Input", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { foreach (var item in Model) { @Html.HiddenFor(x => item.Id); @Html.HiddenFor(x => item.Name); @Html.CheckBoxFor(x=>item.isselected); @Html.DisplayFor(x => item.Name); } <input type="submit" value="submit"/> } </body> </html> 

控制器:

  public ActionResult Index() { List<paymentmethod> listpay = new List<paymentmethod>() { new paymentmethod() { Id="CS",isselected = true,Name = "Cash"}, new paymentmethod() { Id="CH",isselected = false,Name = "Cheque"}, new paymentmethod() { Id="CR",isselected = false,Name = "Credit"}, new paymentmethod() { Id="BN",isselected = false,Name = "Bank"} }; return View(listpay); } [HttpPost] public string Index(IEnumerable<paymentmethod> model) { if (model.Count(x => x.isselected) == 0) { return "no any option is selected"; } else { StringBuilder sb = new StringBuilder(); sb.Append("You selected:"); foreach (paymentmethod pay in model) { if (pay.isselected == true) { sb.Append(":" + pay.Name); } } return sb.ToString(); } } 

您需要使用索引器而不是foreach循環,模型才能正確發回

for(int i=0; i < Model.Count(); i++)
{
    @Html.HiddenFor(x => Model[i].Id);
    @Html.HiddenFor(x => Model[i].Name);
    @Html.CheckBoxFor(x=>Model[i].isselected);

    @Html.DisplayFor(x => Model[i].Name);
}

編輯:忘記提及,您需要將模型轉換為列表,而不是IEnumerable

您可以使用foreach循環,但是需要將其放置在beginform部分之外,否則每次循環通過時,都會用新的集合替換最后一組數據。

還請閱讀此內容(使用CheckBoxFor的正確方法):)- 正確使用.net MVC Html.CheckBoxFor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM