2

这有点奇怪(至少对我来说),所以要做好准备。我有一个简单的对象

public class User
{
  public FirstName { get; set; }
  public LastName { get; set; }
}

还有一个非常简单的视图:

@Model User
@{
    Layout = null;
}
@Html.TextBoxFor(x => x.FirstName)
@Html.Raw(Model.FirstName)

和控制器:

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”。

我已经调试了控制器和视图。进入视图的模型具有正确的属性。我的问题:

为什么会这样?我以前从未见过这种情况,也无法使用其他类型的对象、视图等来重现它。

我正在使用 .NET 4.5 和 MVC 3。

4

1 回答 1

3

经过数小时的搜索并在此处发布,我发现了一个几乎相同的 stackoverflow 问题。

MVC4 TextBox用于覆盖模型属性

总结Aviran Cohen在链接帖子中的回答,可以通过将行添加ModelState.Clear();到受影响的控制器操作的开头来解决此问题:

public ActionResult GetUserInfo(Guid id, string firstName = "")
{
  ModelState.Clear();
  User user;
  /* ... lookup the user instance ... */
  return View(user);
}
于 2013-04-10T16:21:36.167 回答