我在我的页面上显示了一组数据。我正在为每一行显示标签和文本框。
以下是我的视图中的示例代码:
@using (Html.BeginForm())
{
<input type="submit" value="Ok" />
@for (int index = 0; index < Model.Persons.Count; index++ )
{
@Model.Persons[index].Name
@Html.TextBoxFor(m => Model.Persons[index].Amount)
}
}
在Post Action中,我是更新金额(比如增加5)。
[HttpPost]
public ActionResult Persons(PersonList presenter)
{
for (int index = 0; index < presenter.Persons.Count; index++)
{
presenter.Persons[index].Amount += 5;
}
return View(presenter);
}
此更新金额未反映在页面上。 但是,如果我使用下面的代码,那么它会正确显示,如
@Model.Persons[index].Amount
或者
<input type="text" id=@("Persons_" + index + "__Amount") name="Persons[@index].Amount " value="@Model.Persons[index].Amount" ></input>
我想了解这种行为的原因,为什么会发生这种情况?
任何帮助都将不胜感激。
答案 0 :(得分:5)
在更新值之前,只需添加ModelState.Clear(),更新您的集合并将其返回。
答案 1 :(得分:2)
发布的值将覆盖viewmodel值。在使用之前我已经解决了这个问题......
ModelState["Field"].Value = new ValueProviderResult("NewValue", "Field", CultureInfo.InvariantCulture);
我猜你的情况(我不完全确定你的对象是什么)的东西是
PersonCollection persons = (PersonCollection)ModelState["Persons"].Value.RawValue;
persons[index].Amount += 5;
ModelState["Persons"].Value = new ValueProviderResult(persons, "Persons", CultureInfo.InvariantCulture);