私の夢中になるMVCアプリケーションでは、本当に変わったことがあります。 MVCページで、ユーザーが選択された後、ログインはHTML上で「レンダリング」されるべきです。 一度MVCのクレイジープロパティは価値を失います。 Html.HiddenForバグはありますか?
<input id="SelectedLogin" name="SelectedLogin" value="<Login>" type="hidden">
(where "Model".SelectedLogin is used)
の形で
FrmNextStep('<Login>', ...
(where Model.SelectedUser.Login is used)
とかつての形ではなく二番目のは常に空白のまま。 2つの呼び出しがまったく同じではないにもかかわらず、戻り値が正しくなければならないので、本当に変です。
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にバグはありますか?
クレイジープロパティ... –