来自模型的不同值

时间:2015-03-25 16:17:37

标签: c# asp.net-mvc-4 razor

我在Razor模板中有这两行:

@Html.Hidden("step", Model.Step)
<p>@Html.Label(Model.Step.ToString())</p>

他们产生两个不同的价值观:

<input data-val="true"
       data-val-number="The field Step must be a number."
       data-val-required="The Step field is required."
       id="step"
       name="step"
       type="hidden"
       value="0">
    <p>
        <label for="">1
        </label>
    </p>

这怎么可能?

属性Step的类型为Int32,并且每次POST操作都会递增。

编辑:

@model ***.WebUI.Models.OrderViewModel
@{
  ViewBag.Title = "New order";
}
<h2>
  New order</h2>
@using (Html.BeginForm())
{
  @Html.Hidden("step", Model.Step)
  <p>@Html.Label(Model.Step.ToString())</p>
  <div>
    //other inputs
  </div>
}

1 个答案:

答案 0 :(得分:2)

你没有向你展示过POST方法,但是基于&#34;属性步骤属于Int32类型,并且每个POST动作都会增加。&#34; 我认为它看起来像< / p>

public ActionResult Edit(OrderViewModel model)
{
  model.Step = model.Step + 1;
  return View(model);
}

发布模型时,模型值会添加到ModelState(以及任何ModelState错误),因此在第一篇文章中,ModelState的{​​{1}}值将为{{ 1}}。 Html帮助器使用Step值进行绑定(如果存在),因此当您返回视图时0将绑定到ModelState的值(而不是@Html.Hidden("step", Model.Step)的模型值) 。 {O-3}中解释了导致此行为的原因。

正确的方法是遵循PRG模式(重定向到GET方法,传递指示0值的参数并初始化新的1),但是您可以通过清除{ {1}}以便Html Helper使用模型值。

Step

但是,请谨慎使用。 OrderViewModel也会删除所有错误。