我正在學(xué)習(xí) mvc 并嘗試填充復(fù)選框列表并在提交按鈕上獲取復(fù)選框列表的所有選定值,但我在發(fā)布后在控制器中提交按鈕時(shí)為空。視圖和控制器的代碼如下。httpget 部分工作正常,并根據(jù)需要顯示所有復(fù)選框。但是提交后出現(xiàn)問題查看:@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(); } }
2 回答

慕娘9325324
TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
您需要使用索引器而不是 foreach 循環(huán)來使模型正確回發(fā)
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);
}
編輯:忘了提及,您需要將模型轉(zhuǎn)換為列表而不是 IEnumerable

慕仙森
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
你可以使用你的 foreach 循環(huán),但它需要放在 beginform 部分之外,否則每次循環(huán)時(shí),它都會(huì)用新的數(shù)據(jù)集替換最后一組數(shù)據(jù)。
- 2 回答
- 0 關(guān)注
- 221 瀏覽
添加回答
舉報(bào)
0/150
提交
取消