我正在使用ASP.NET MVC以这种方式向控制器发布强类型视图:
@using MyApp.Model
@model UserTest
@{
Layout = null;
}
@using (Html.BeginForm())
{
<div>
<p>Name: @Html.TextBoxFor(u => u.Data, new { Name = "txtName" })</p>
</div>
<div style="clear:left; padding-top: 15px">
<input type="submit" value="Create" id="btnSubmit" />
</div>
}
在控制器上:
[HttpPost]
public ActionResult Create(UserTest userdata)
{
}
当我发布表单时,收到的userdata
的唯一属性为null
值
但是,如果我删除以这种方式更改文本框名称属性的htmlAttribute
:
@using (Html.BeginForm())
{
<div>
<p>Name: @Html.TextBoxFor(u => u.Data)</p>
</div>
<div style="clear:left; padding-top: 15px">
<input type="submit" value="Create" id="btnSubmit" />
</div>
}
当我发布表单时,收到的userdata
有一个有效属性,其值正确绑定。
我想知道我是否遗漏了一些东西,因为这看起来像个错误。如果是这种情况,我应该避免完全改变MVC助手上生成的HTML对象的名称吗?
我拥有的MVC版本是5.2.2.0,框架的运行时版本是:v4.0.30319
我很欣赏这方面的见解。
答案 0 :(得分:2)
我应该避免完全改变MVC助手上生成的HTML对象的名称吗?
是。输入元素&#39;名称是使模型绑定工作的原因。
所以不,不是错误。不要改变它们。
您无法解释为什么要更改它们,但您可以使用其他属性来完成您想要的操作。
答案 1 :(得分:2)
这不是错误。这是预期的行为。
模型绑定的工作原理是将表单中的浏览器发送的键/值对绑定到模型属性(或视图数据)。表单输入的name
属性用作在POST请求中提交的表单数据中的键。
当您使用HTML帮助器呈现表单字段时,框架会自动生成所需的相应name
属性,以确保该字段将正确绑定到您传递给帮助程序的表达式中指定的属性。
如果更改name
,则会破坏表单输入与其绑定的属性之间的仅连接。