ASP.NET MVC 路由值和视图模型
ASP.NET MVC route values and view model
这是我遇到的一个奇怪问题。
型号:
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
在视图中,需要 John Doe 的是 Jane Smith。 view model 明明就是人。
但是当视图修改为:
<div>
@Html.TextBox("First Name", Model.FirstName)
</div>
<div>
@Html.TextBox("Last Name", Model.LastName)
</div>
一切都很好。这是为什么?我正在使用 MVC 5。
是因为歧义。将函数参数 FirstName
重命名为 _FirstName
,将 LastName
重命名为 _LastName
。然后它将按您的预期工作。
public ActionResult Contact(string _FirstName, string _LastName)
这就是 HTML 助手的工作方式。他们将首先查看查询参数并使用这些值,而不是使用您在控制器上的模型上指定的值。
有关更多信息,您可以在此处查看相同的 post:Why is my MVC ViewModel member overridden by my ActionResult parameter?
您想改用您的模型吗?在您的控制器上将其删除:
ModelState.Remove("FirstName");
ModelState.Remove("LastName");
var person = new Person();
person.FirstName = "John";
person.LastName = "Doe";
它会呈现您想要的 Model
值。
这是我遇到的一个奇怪问题。
型号:
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
在视图中,需要 John Doe 的是 Jane Smith。 view model 明明就是人。
但是当视图修改为:
<div>
@Html.TextBox("First Name", Model.FirstName)
</div>
<div>
@Html.TextBox("Last Name", Model.LastName)
</div>
一切都很好。这是为什么?我正在使用 MVC 5。
是因为歧义。将函数参数 FirstName
重命名为 _FirstName
,将 LastName
重命名为 _LastName
。然后它将按您的预期工作。
public ActionResult Contact(string _FirstName, string _LastName)
这就是 HTML 助手的工作方式。他们将首先查看查询参数并使用这些值,而不是使用您在控制器上的模型上指定的值。
有关更多信息,您可以在此处查看相同的 post:Why is my MVC ViewModel member overridden by my ActionResult parameter?
您想改用您的模型吗?在您的控制器上将其删除:
ModelState.Remove("FirstName");
ModelState.Remove("LastName");
var person = new Person();
person.FirstName = "John";
person.LastName = "Doe";
它会呈现您想要的 Model
值。