4

我有一个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">

当表单提交时,这个值加一并且模型返回给视图。如果我将状态值写入页面,我可以看到该值已正确递增。

但是,这个隐藏的输入字段总是被缓存。它永远不会得到正确的值。我尝试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)
}
4

1 回答 1

3

根据这里的这篇文章, html帮助器HiddenFor总是首先使用发布的值,然后是模型中的值。

正如您所说,将值写入页面时,您可以看到它增加了,但助手正在使用先前发布的值,这是预期的行为。

该链接确实建议使用ModelState.Remove("Status")ModelState.Clear()在分配新值之前。

它还建议另一种选择可能是不使用HiddenFor助手,而是自己构建隐藏字段。与此类似:

<input type="hidden" name="Status" value="@Model.Status" />

无论哪种方式,您的问题看起来都是基于类似的情况。

于 2012-05-08T23:02:11.567 回答