在我的MVC应用程序中发生了一些非常奇怪的事情让我发疯.在我的MVC页面上,在用户被选中后,它的登录应该在HTML上"渲染"两次.一旦形成
FrmNextStep('<Login>', ...
(where Model.SelectedUser.Login is used)
Run Code Online (Sandbox Code Playgroud)
一旦形式的
<input id="SelectedLogin" name="SelectedLogin" value="<Login>" type="hidden">
(where "Model".SelectedLogin is used)
Run Code Online (Sandbox Code Playgroud)
但第二个总是留空.这真的很奇怪,因为尽管两个调用不完全相同,但返回值应该是.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
当我调试代码时,在"呈现"阶段唯一调用选定登录并返回正确的登录.
Html.HiddenFor有什么错误吗?
Ser*_*rge 12
好吧,它实际上是Html.HiddenFor的错误/错误行为.
在写我的问题时,我才想到这种可能性的想法.
我改成了:
<input type="hidden" value="@Html.AttributeEncode(Model.SelectedLogin)" id="SelectedLogin" name="SelectedLogin" />
Run Code Online (Sandbox Code Playgroud)
而且它的工作非常好.
编辑:
还有另一个工作环节.
调用ModelState.Clear(); 在控制器后期行动中.
我会用这个选项.
ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)
+
@Html.HiddenFor(m => m.SelectedLogin)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6044 次 |
最近记录: |