1

这是我遇到的一个奇怪问题。

该模型:

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。视图模型显然是人。

但是当视图修改为:

<div>
    @Html.TextBox("First Name", Model.FirstName)
</div>
<div>
    @Html.TextBox("Last Name", Model.LastName)
</div>

一切都很好。这是为什么?我在 MVC 5 上。

4

2 回答 2

1

这就是 HTML Helper 的工作原理。他们将首先查看查询参数并使用这些值,而不是使用您在控制器上的模型上指定的值。

有关更多信息,您可以在此处查看相同的帖子:为什么我的 MVC ViewModel 成员被我的 ActionResult 参数覆盖?

你想改用你的模型吗?在控制器上删除它:

ModelState.Remove("FirstName");
ModelState.Remove("LastName");
var person = new Person();
person.FirstName = "John";
person.LastName = "Doe";

它将呈现您想要的Model值。

于 2020-08-09T21:27:36.487 回答
0

是因为模棱两可。将函数参数重命名FirstName_FirstName和。然后它将按您的预期工作。LastName_LastName

public ActionResult Contact(string _FirstName, string _LastName)
于 2020-07-31T08:01:53.623 回答