今日、MVC で非常に奇妙なエラーが発生しました。すべてのコードを投稿したくはありませんが、小さな例を投稿します。
フォームを含む cshtml ページがあるとします。
@model UserValidation
<!-- Code before body -->
@using (Html.BeginForm("UpdateUser", "Account"))
{
<div class="Label">@Html.LabelFor(m => m.Name):</div>
<div>@Html.TextBoxFor(x => x.Name)</div>
<div style="clear: both;">
@Html.ValidationMessageFor(x => x.Name)
<div class="Label">@Html.LabelFor(x => x.OldPass):</div>
<div>@Html.PasswordFor(x => x.OldPass)</div>
<div style="clear: both;">
@Html.ValidationMessageFor(x => x.OldPass)
<!-- More Form Code Here, You get the idea -->
<input type="submit" value="Submit" />
}
検証クラスとともに(これが問題の一部であるかどうかはわかりません)
public class UserValidation
{
[Display(Name = "User Name")]
public string Name { get; set; }
[Display(Name = "Current password")]
public string OldPass { get; set; }
//More code here
}
最後に、コントローラーの HTTPPOST:
[HttpPost]
public ActionResult UpdateInfo(UserValidation message)
{
//Code
if(message == null)
{
return null; //If param name == message this line is hit
}
return View();
}
へのパラメーターUpdateInfo
が「メッセージ」または「メッセージ」(および私が知っているもののみ) の場合、MVC はオブジェクトを逆シリアル化できず、常に等号になりnull
ます。ただし、パラメーター オブジェクトの名前を変更するだけで、正しいフォーム データが含まれます。
[HttpPost]
public ActionResult UpdateInfo(UserValidation newUserInfo)
{
//Code
if(newUserInfo == null)
{
return null;
}
return View(); //Param name != message, this line is hit
}
繰り返しますが、これはオブジェクトが「メッセージ」または「メッセージ」と等しい場合にのみ発生します。なぜそうなのか、私にはわかりません。
誰にもこれの理由がありますか?