[英]MVC crazy property lose its value. Does Html.HiddenFor bug?
在我的MVC應用程序中發生了一些非常奇怪的事情讓我發瘋。 在我的MVC頁面上,在用戶被選中后,它的登錄應該在HTML上“渲染”兩次。 一旦形成
FrmNextStep('<Login>', ...
(where Model.SelectedUser.Login is used)
一旦形式的
<input id="SelectedLogin" name="SelectedLogin" value="<Login>" type="hidden">
(where "Model".SelectedLogin is used)
但第二個總是留空。 這真的很奇怪,因為盡管兩個調用不完全相同,但返回值應該是。
if (Model.SelectedUser != null)
{
<span>Some value</span>
<script type="scriptADResultComplete">
@{
var script = String.Format(
@"FrmNextStep('{0}', '{1}', '{2}');"
, Model.SelectedUser.Login.Replace("'", @"\'")
, Model.SelectedUser.FirstName.Replace("'", @"\'")
, Model.SelectedUser.LastName.Replace("'", @"\'")
);
@Html.Raw(script);
}
</script>
}
<input type="hidden" name="hfAction" />
<input type="hidden" name="hfUserLogin" />
@Html.HiddenFor(m => m.CurrentPage, new { id = "hfCurrentPage" })
@Html.HiddenFor(m => m.SelectedLogin);
private User selectedUser;
public User SelectedUser
{
get
{
if (this.selectedUser == null)
{
this.selectedUser = this.AllUsers.FirstOrDefault(user => user.Selected) ?? User.DefaultUser;
}
if (this.selectedUser == User.DefaultUser)
{
return null;
}
return this.selectedUser;
}
set
{
this.AllUsers.ForEach(user => user.Selected = (user == value));
this.selectedUser = null;
}
}
public string SelectedLogin
{
get
{
return (this.SelectedUser ?? User.DefaultUser).Login;
}
set
{
this.SelectedUser = this.AllUsers.FirstOrDefault(user => user.Login == value);
}
}
當我調試代碼時,在“呈現”階段唯一調用選定登錄並返回正確的登錄。
Html.HiddenFor有什么錯誤嗎?
好吧,它實際上是Html.HiddenFor的錯誤/錯誤行為。
在寫我的問題時,我才想到這種可能性的想法。
我改成了:
<input type="hidden" value="@Html.AttributeEncode(Model.SelectedLogin)" id="SelectedLogin" name="SelectedLogin" />
而且它的工作非常好。
編輯:
還有另一個工作環節。
調用ModelState.Clear(); 在控制器后期行動中。
我會用這個選項。
ModelState.Clear();
+
@Html.HiddenFor(m => m.SelectedLogin)
我也遇到了這個問題,.cshtml在返回頁面時執行了兩次,第二次運行時出現了null模型對象的問題。
使用@Serge的答案修復了HiddenFor
的問題,但后來我也遇到了無法以這種方式解決的HiddenFor
問題。
事實證明這是一個間歇性問題,調用視圖的Controller
方法是設置ViewBag
屬性,同時通過protected internal ViewResult View(string viewName, object model);
單獨返回視圖+模型protected internal ViewResult View(string viewName, object model);
。
我正在進行的項目遍布整個地方,在其他控制器/視圖上工作正常。 但對於我所維護的那個, HiddenFor
的這個空問題正在發生。
無論如何,我從控制器中取出所有ViewBag
setter,並將它們移動到模型對象上的NotMapped
屬性中。
一旦完成, HiddenFor
調用等都開始再次表現。 所以,不要混淆ViewBag和ViewModel孩子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.