来自模型的不同值
Different values from model
我在 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>
}
你没有向你展示 POST 方法,但基于 "Property Step is of a type Int32 and is incremented every POST action." 我认为它看起来像
public ActionResult Edit(OrderViewModel model)
{
model.Step = model.Step + 1;
return View(model);
}
当您 post 模型时,模型值会添加到 ModelState
(连同任何 ModelState 错误),因此在第一个 post 中,ModelState
值的 Step
将是 0
。 Html 助手使用 ModelState
值进行绑定(如果存在),因此当您 return 视图 @Html.Hidden("step", Model.Step)
将绑定到 0
的值(不是模型1
的值)。 this answer.
中解释了此行为的原因
正确的方法是遵循 PRG 模式(重定向到 GET 方法,传递一个指示 Step
值的参数并初始化一个新的 OrderViewModel
),但是您可以通过清除 ModelState
以便 Html Helper 将使用模型值。
public ActionResult Edit(OrderViewModel model)
{
ModelState.Clear(); // clear all model state
model.Step = model.Step + 1;
return View();
}
但是,请谨慎使用。 ModelState.Clear()
也删除了所有错误。
我在 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>
}
你没有向你展示 POST 方法,但基于 "Property Step is of a type Int32 and is incremented every POST action." 我认为它看起来像
public ActionResult Edit(OrderViewModel model)
{
model.Step = model.Step + 1;
return View(model);
}
当您 post 模型时,模型值会添加到 ModelState
(连同任何 ModelState 错误),因此在第一个 post 中,ModelState
值的 Step
将是 0
。 Html 助手使用 ModelState
值进行绑定(如果存在),因此当您 return 视图 @Html.Hidden("step", Model.Step)
将绑定到 0
的值(不是模型1
的值)。 this answer.
正确的方法是遵循 PRG 模式(重定向到 GET 方法,传递一个指示 Step
值的参数并初始化一个新的 OrderViewModel
),但是您可以通过清除 ModelState
以便 Html Helper 将使用模型值。
public ActionResult Edit(OrderViewModel model)
{
ModelState.Clear(); // clear all model state
model.Step = model.Step + 1;
return View();
}
但是,请谨慎使用。 ModelState.Clear()
也删除了所有错误。