ASP.NET MVC路由值和视图模型



我遇到了一个奇怪的问题。

型号:

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)

相关内容

  • 没有找到相关文章

最新更新