加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – MVC疯狂财产失去了它的价值. Html.HiddenFor bug?

发布时间:2020-12-15 04:35:42 所属栏目:百科 来源:网络整理
导读:在我的MVC应用程序中发生了一些非常奇怪的事情让我发疯. 在我的MVC页面上,在用户被选中后,它的登录应该在 HTML上“渲染”两次. 一旦形成 FrmNextStep('Login',...(where Model.SelectedUser.Login is used) 一旦形式的 input id="SelectedLogin" name="Selec
在我的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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读