为什么隐藏的输入会丢失我的视图模型的属性值?

时间:2012-10-01 18:58:03

标签: asp.net-mvc razor

当我使用以下Razor标记尝试将PageCount值发送到客户端时,输入的值将呈现为0:

@using (Html.BeginForm("Index", "Gallery", FormMethod.Post, new { id = "search-form" }))
{
    @Html.HiddenFor(m => m.PageCount)

尽管PageCount的值为2:

,但仍然如下所示
<input data-val="true" data-val-number="The field PageCount must be a number." data-val-required="The PageCount field is required." id="PageCount" name="PageCount" type="hidden" value="0">

当我回到几乎所有普通人的时候。 HTML,像这样:

<input type="hidden" name="PageCount" id="PageCount" value="2">

Razor w.r.t是否有一些有趣的行为。隐藏的输入,还是什么?

1 个答案:

答案 0 :(得分:4)

您是否在POST控制器操作中设置PageCount值?如果是这样,请确保已从ModelState中删除旧值:

[HttpPost]
public ActionResult Index(SomeViewModel model)
{
    ModelState.Remove("PageCount");
    model.PageCount = 2;
    return View(model);
}

原因是HTML帮助程序在绑定时使用最初的POSTed值,而不是模型中的值。因此,如果要在控制器操作中修改它,则应从ModelState中删除旧值。

这不仅限于HiddenFor帮助器。这就是生成输入字段的所有HTML帮助程序的工作方式。