MVC4 - 表单不显示新的模型值

时间:2013-11-21 11:18:21

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有一个带有2个动作的控制器:1表示显示表单,2表示处理提交的表单。像这样的Smth:

public ActionResult Create()
{
    TestModel model = new TestModel() { Value1 = "aaa" };
    return View(model);
}

[HttpPost]
public ActionResult Create(TestModel model)
{
    model.Value2 = "bbb";
    return View(model);
}

正如你所看到的,我用“aaa”预先填充了Value1,因此它出现在表单上 - 这部分工作正常。但是,当我提交表单时,我想填充模型对象的其他属性,并使用相同的视图重新显示表单。

问题是,在提交时,表单仍然显示原始模型对象而不是更新的对象,即只有Value1填充“aaa”而Value2为空。

我使用的视图是脚手架选项自动生成的视图:

@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>TestModel</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Value1)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Value1)
        @Html.ValidationMessageFor(model => model.Value1)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Value2)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Value2)
        @Html.ValidationMessageFor(model => model.Value2)
    </div>

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>

}

1 个答案:

答案 0 :(得分:3)

你必须致电ModelState.Clear()所以结果将是预期的。当POSTed数据被发送回客户端时,MVC会做出假设。但要注意,手动清除它可能会导致意外结果......

您可以在此处详细了解:Asp.net MVC ModelState.Clearhttp://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx