今天在 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();
}
如果参数 toUpdateInfo
是“消息”或“消息”(并且只有我所知道的那些)MVC 将无法反序列化对象并且它总是等于null
. 但是,如果我们只是更改参数对象的名称,它将包含正确的表单数据:
[HttpPost]
public ActionResult UpdateInfo(UserValidation newUserInfo)
{
//Code
if(newUserInfo == null)
{
return null;
}
return View(); //Param name != message, this line is hit
}
同样,这只发生在对象等于“消息”或“消息”时。我不知道为什么会这样。
有人有这个理由吗?