0

我试图弄清楚为什么这个简单的控制器操作不起作用。我要做的就是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,但是当返回视图时,文本框包含1Model.Number显示 2。

我错过了什么吗?

4

1 回答 1

0

Html 助手偏爱ModelState实际模型值中的值。

因此,如果您在操作中修改模型,则需要ModelSate在将其传递给视图之前清除:

[HttpPost]
public ActionResult Test(ViewModel viewModel)
{
    viewModel.Number = viewModel.Number + 1;
    ModelState.Clear();
    return View("Test", viewModel);
}

您可以在这篇精彩的文章中阅读有关此 ASP.NET MVC 功能的更多信息:

ASP.NET MVC 回发和 HtmlHelper 控件忽略模型更改

于 2013-04-05T20:33:36.127 回答