我有一个autocomplete
属性设置为off
的表单。
在这个表单中,有一个隐藏的输入元素(使用ASP.NET MVC的Html.HiddenFor()
方法生成,但是,这应该是不相关的):
<input type="hidden" value="0" name="Status" id="Status" data-val-required="The Status field is required." data-val-number="The field Status must be a number." data-val="true">
提交表单时,此值将加1,模型将返回到视图。如果我将状态值写入页面,我可以看到该值已正确递增。
但是,此隐藏的输入字段始终被缓存。它永远不会得到正确的价值。我尝试直接在input元素上设置autocomplete
属性,但没有成功。
如何获取此隐藏字段以获取正确的值?我不想使用任何Javascript。
修改:提供更多代码......
控制器
//This code is being executed, and the status is being incremented.
shippingOrder.Status = (shippingOrder.Status != (int)OrderStatus.Closed) ? shippingOrder.Status + 1 : shippingOrder.Status;
查看
@using (Html.BeginForm("Number", "Order", FormMethod.Post, new { id = "orderSummary", autocomplete = "off" })) {
...
@Html.HiddenFor(m => m.Status)
}
答案 0 :(得分:3)
根据这篇帖子here html帮助者(例如HiddenFor
)将始终首先使用已发布的值,然后使用模型中的值。
正如您所说,在将值写入页面时,您可以看到它递增,但帮助程序正在使用先前发布的值,这是预期的行为。
该链接确实建议在分配新值之前使用ModelState.Remove("Status")
或ModelState.Clear()
。
它还表明另一个选项可能不是使用HiddenFor
帮助程序,而是自己构建隐藏字段。与此类似:
<input type="hidden" name="Status" value="@Model.Status" />
无论哪种方式,看起来你的问题都是基于类似的情况。