简单模型绑定不适用于整数

时间:2013-04-05 20:19:27

标签: asp.net-mvc-2 model-binding

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

我错过了什么吗?

1 个答案:

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