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

前端之家收集整理的这篇文章主要介绍了c# – MVC疯狂财产失去了它的价值. Html.HiddenFor bug?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的MVC应用程序中发生了一些非常奇怪的事情让我发疯.
在我的MVC页面上,在用户被选中后,它的登录应该在 HTML上“渲染”两次.
一旦形成 @H_403_4@FrmNextStep('<Login>',... (where Model.SelectedUser.Login is used)

一旦形式的

@H_403_4@<input id="SelectedLogin" name="SelectedLogin" value="<Login>" type="hidden"> (where "Model".SelectedLogin is used)

但第二个总是留空.
这真的很奇怪,因为尽管两个调用不完全相同,但返回值应该是.

@H_403_4@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的错误/错误行为.
在写我的问题时,我才想到这种可能性的想法.

我改成了:

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

而且它的工作非常好.

编辑:

还有另一个工作环节.

调用ModelState.Clear();在控制器后期行动中.
我会用这个选项.

@H_403_4@ModelState.Clear(); @H_403_4@@Html.HiddenFor(m => m.SelectedLogin)
原文链接:https://www.f2er.com/csharp/91223.html

猜你在找的C#相关文章