我试图弄清楚为什么这个简单的控制器动作不起作用。我想要做的就是在每次POST后增加Number
。
模型
public class ViewModel
{
public int Number { get; set; }
}
查看
<body>
<% using (Html.BeginForm("Test", "Invoice"))
{ %>
<%: Html.EditorFor(m => m.Number) %>
<%= Model.Number %>
<input type="submit" value="Submit" />
<% } %>
</body>
控制器
public ActionResult Test()
{
var viewModel = new ViewModel {Number = 1};
return View("Test", viewModel);
}
[HttpPost]
public ActionResult Test(ViewModel viewModel)
{
viewModel.Number = viewModel.Number + 1;
return View("Test", viewModel);
}
在我的控制器中,viewModel.Number
增加到2
,但在返回视图时,文本框包含1
,Model.Number
显示为2.
我错过了什么吗?
答案 0 :(得分:0)
Html帮助程序支持ModelState
中的值超过实际的Model值。
因此,如果您在操作中修改模型,则需要先清除ModelSate
,然后再将其传递给视图:
[HttpPost]
public ActionResult Test(ViewModel viewModel)
{
viewModel.Number = viewModel.Number + 1;
ModelState.Clear();
return View("Test", viewModel);
}
您可以在这篇精彩的文章中阅读有关此ASP.NET MVC功能的更多信息:
ASP.NET MVC Postbacks and HtmlHelper Controls ignoring Model Changes