簡體   English   中英

MVC瘋狂財產失去了它的價值。 Html.HiddenFor bug?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM