这有点奇怪(至少对我来说),所以要做好准备。我有一个简单的对象
public class User
{
public FirstName { get; set; }
public LastName { get; set; }
}
还有一个非常简单的 View :
@Model User
@{
Layout = null;
}
@Html.TextBoxFor(x => x.FirstName)
@Html.Raw(Model.FirstName)
和 Controller :
public ActionResult GetUserInfo(Guid id, string firstName = "")
{
User user;
/* ... lookup the user instance ... */
return View(user);
}
我传递的模型的 FirstName =“John”和 LastName =“Doe”。当我导航到/Users/{Id} 时,文本框和 Html.Raw 值的值为“John”。当我导航到/Users/{Id}?firstName= 时,文本框的值为空,Html.Raw 输出的值为“John”。当我导航到/Users/{Id}?firstName=Tom 时,文本框的值为“Tom”,Html.Raw 的值为“John”。
我已经调试了 Controller 和 View 。进入 View 的模型具有正确的属性。我的问题:
为什么会发生这种情况?我以前从未见过这种情况,也无法用其他类型的对象、 View 等重现它。
我正在使用 .NET 4.5 和 MVC 3。
最佳答案
经过几个小时的搜索并在这里发布后,我发现了一个几乎相同的 stackoverflow 问题。
MVC4 TextBoxFor overwritting model property
总结Aviran Cohen根据链接帖子中的答案,可以通过将行 ModelState.Clear();
添加到受影响的 Controller 操作的开头来解决此问题:
public ActionResult GetUserInfo(Guid id, string firstName = "")
{
ModelState.Clear();
User user;
/* ... lookup the user instance ... */
return View(user);
}
关于asp.net - MVC Razor - 影响 TextBoxFor 和模型属性值的查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15931118/