我的viewmodel包含一个整数列表,我遇到的问题是当我发送修改后的表单viewmodel时,它总是等于null。
public class testViewModel
{
public List<int> itemTest { get; set;
}
例如,我将尝试对输入到表单中的新值求和,但计算的总和始终等于0,没有任何变化。
public ActionResult form(int nbre)
{
testViewModel montest = new testViewModel()
{
itemTest = new List<int>()
};
for(int i=0;i<nbre ;i++)
{
montest.itemTest.Add(0);
}
return View(montest);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult form(testViewModel maListe)
{
int somme = 0;
if (maListe.itemTest != null)
{
if (maListe.itemTest.Count() != 0)
{
foreach (var item in maListe.itemTest)
{
somme += item;
}
}
}
//listtest = maListe;
return RedirectToAction("test2", new { qte = somme });
}
@model MvcWebRole1.ViewModels.testViewModel
@{
ViewBag.Title = "Formulaire";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<table>
@foreach (var item in Model.itemTest)
{
<tr >
<td >
@Html.Label("Quantitée")
</td>
<td>
@Html.EditorFor(model => item)
@Html.ValidationMessageFor(model => item)
</td>
</tr>
}
</table>
<input type="submit" value="Valider" />
}
谢谢你,帮助我
答案 0 :(得分:4)
您需要为集合中的每个项目编制索引。您的代码问题似乎是使用 foreach 。您确实希望使用代替并使用 EditorFor 调用传入索引。
for (int i = 0; i < Model.Items.Count; i++) {
@Html.EditorFor(m => m.Items[i])
}
这仅适用于永远不会更改订单的有序列表。如果您想重新排序项目,我建议您阅读Phil Haack关于向服务器发送列表的精彩帖子。
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
答案 1 :(得分:3)
列表绑定
<form>
@for(int i=0;i<Model.itemTest.Count ;i++)
{
@Html.TextBoxFor(x=>x.itemTest[i])
//or just <input type="text" name="itemTest "/> working to
}
答案 2 :(得分:1)
for(int i=0;i<nbre ;i++)
{
montest.itemTest.Add(0);
}
return View(montest);
看起来你用零填充你的int数组而不是。这应该是montest.itemTest.Add(i);
。