MVC3:发布后,更新后的值不会反映在文本框中

时间:2011-08-25 14:27:32

标签: asp.net-mvc-3 postback

我在我的页面上显示了一组数据。我正在为每一行显示标签和文本框。

以下是我的视图中的示例代码:

@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>

我想了解这种行为的原因,为什么会发生这种情况?

任何帮助都将不胜感激。

2 个答案:

答案 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);