c# - MVC 疯狂的属性失去了它的值(value)。 Html.HiddenFor 是否存在错误?

标签 c# asp.net-mvc

我的 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);
        }
    }

当我调试代码时,唯一在“呈现”阶段调用 Selected Login 并返回正确的登录信息。

Html.HiddenFor 有什么问题吗?

最佳答案

好的,这实际上是 Html.HiddenFor 的错误/错误行为。
这种可能性的想法是在我写问题时才想到的。


我把它改成了:

<input type="hidden" value="@Html.AttributeEncode(Model.SelectedLogin)" id="SelectedLogin" name="SelectedLogin" />

它工作得很好。

编辑:

还有另一种解决方法。

调用 ModelState.Clear();在 Controller 后 Action 中。
我会使用这个选项。

ModelState.Clear();

+

@Html.HiddenFor(m => m.SelectedLogin)

关于c# - MVC 疯狂的属性失去了它的值(value)。 Html.HiddenFor 是否存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816184/

相关文章:

c# - 将文件从一个文件夹移动到另一个 C#

asp.net-mvc - “不是虚拟路径”,下载文件时出错

c# - ASP.Net 对导航栏按钮使用 @Html.ActionLink()

c# - c#中的增量计数

将文件从 Azure 文件共享复制到 Azure Blob 的 C# 代码

c# - Visual Studio 2013 深色主题折叠文本颜色几乎不可见

c# - 显式使用命名空间与包含整个引用

asp.net-mvc - 使用 EF 上传到 azure 后出现问题无法加载指定的元数据资源错误

html - 有没有办法将 Logo 对齐到导航栏的中心?

asp.net-mvc - 为什么您已经或尚未转向 ASP.NET MVC?