2012-05-08 20 views
4

我有一個表格,其autocomplete屬性設置爲off即使關閉了自動完成功能,Firefox仍會隱藏隱藏的輸入

裏面這種形式中,有一個隱藏的輸入元件(使用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) 
} 
+0

如何發佈您的控制器操作,特別是它增加的部分,以及可能的視圖? –

+0

@AaronDaniels - 我不想讓這個問題對我的場景太具體,但我確實添加了一些代碼示例。我已經用其他屬性測試過了,比如一個字符串。我已經嘗試在控制器中的值中進行硬編碼,隱藏的輸入仍然不會更新,但是如果我將值寫入HTML響應,則會看到我想要的值。模型* *得到正確的值。 –

回答

3

根據這個帖子here HTML輔助等HiddenFor總是會首先使用發佈值,然後是模型中的值。

正如你所說的,當將值寫入頁面時,可以看到它增加了,但助手正在使用之前發佈的值,這是預期的行爲。

在分配新值之前,鏈接確實建議使用ModelState.Remove("Status")ModelState.Clear()

它也建議另一個選項可能不使用HiddenFor助手,而是自己構建隱藏的字段。與此相似:

它看起來像你的問題

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

無論哪種方式是基於類似的情況。

+0

感謝您的幫助。我不想用字符串硬編碼屬性名稱,所以我將使用'Clear()'方法來解決這個問題。 –