我有一个带有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>
}
答案 0 :(得分:3)
你必须致电ModelState.Clear()
所以结果将是预期的。当POSTed数据被发送回客户端时,MVC会做出假设。但要注意,手动清除它可能会导致意外结果......
您可以在此处详细了解:Asp.net MVC ModelState.Clear和http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx