亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ASP.Net MVC Html.HiddenFor具有錯誤的值

ASP.Net MVC Html.HiddenFor具有錯誤的值

aluckdog 2019-10-26 11:08:20
我在項目中使用MVC 3,并且看到了一個非常奇怪的行為。我正在嘗試為模型上的特定值創建一個隱藏字段,問題是由于某種原因,在字段上設置的值與模型中的值不對應。例如我有以下代碼,作為測試:<%:Html.Hidden("Step2", Model.Step) %><%:Html.HiddenFor(m => m.Step) %>我認為這兩個隱藏字段將具有相同的值。我要做的是,在第一次顯示“視圖”時將該值設置為1,然后在提交后將“模型”字段的值增加1。因此,我第一次呈現頁面時兩個控件的值均為1,但是第二次呈現的值分別為:<input id="Step2" name="Step2" type="hidden" value="2" /><input id="Step" name="Step" type="hidden" value="1" />如您所見,第一個值是正確的,但是第二個值似乎與我第一次顯示View相同。我想念什么?* For HTML幫助程序是否以某種方式緩存值?如果是這樣,如何禁用此緩存?謝謝你的幫助。
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

這很正常,這就是HTML助手的工作方式。他們首先使用POST請求的值,然后使用模型中的值。這意味著,即使您在控制器操作中修改了模型的值(如果POST請求中存在相同的變量),您的修改也將被忽略,并將使用POSTed的值。


一種可能的解決方法是在試圖修改值的控制器操作中,從模型狀態中刪除該值:


// remove the Step variable from the model state 

// if you want the changes in the model to be

// taken into account

ModelState.Remove("Step");

model.Step = 2;

另一種可能性是編寫自定義HTML幫助程序,該幫助程序將始終使用模型的值而忽略POST值。


還有另一種可能性:


<input type="hidden" name="Step" value="<%: Model.Step %>" />


查看完整回答
反對 回復 2019-10-26
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

在編寫向導時會遇到相同的問題,該向導在每個步驟都顯示較大模型的不同部分。

來自“第1步”的數據和/或錯誤將與“第2步”混合,以此類推,直到我最終意識到ModelState被“怪罪”。


這是我的簡單解決方案:


if (oldPageIndex != newPageIndex)

{

    ModelState.Clear(); // <-- solution

}


return View(model[newPageIndex]);


查看完整回答
反對 回復 2019-10-26
  • 3 回答
  • 0 關注
  • 561 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號