我遇到了一个奇怪的问题。
型号:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
视图:
@model Person
<div>
@Html.TextBoxFor(m => m.FirstName)
</div>
<div>
@Html.TextBoxFor(m => m.LastName)
</div>
行动:
public ActionResult Contact(string FirstName, string LastName)
{
// do something with FirstName and LastName passed in
var person = new Person();
person.FirstName = "John";
person.LastName = "Doe";
return View(person);
}
当调用行动时:
/Home/Contact?FirstName=Jane&LastName=Smith
在人们看来,无名氏就是在简·史密斯那里。视图模型显然是人。
但当视图修改为:
<div>
@Html.TextBox("First Name", Model.FirstName)
</div>
<div>
@Html.TextBox("Last Name", Model.LastName)
</div>
一切都很好。为什么?我在MVC 5上。
这就是HTML Helper的工作原理。他们将首先查看查询参数并使用这些值,而不是在控制器上的Model上指定的上使用。
有关更多信息,您可以在这里看到同一篇文章:为什么我的MVC ViewModel成员被我的ActionResult参数覆盖?
是否使用您的模型?在控制器上删除它:
ModelState.Remove("FirstName");
ModelState.Remove("LastName");
var person = new Person();
person.FirstName = "John";
person.LastName = "Doe";
它将呈现所需的Model
值。
这是因为歧义。将函数参数FirstName
重命名为_FirstName
,将LastName
重命名为_LastName
。然后它会像你预期的那样工作。
public ActionResult Contact(string _FirstName, string _LastName)