在视图上更改 htmlAttribute 名称时模型绑定不起作用

Model binding isn't working when htmlAttribute Name is changed on View

我正在使用 ASP.NET MVC 以这种方式 post 控制器的强类型视图:

@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) 
{      
}

当我 post 表单时,收到的 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>
}

当我 post 表单时,收到的 userdata 具有有效的 属性,其值已正确绑定。

我想知道我是否遗漏了什么,因为这看起来像是一个错误。如果是这种情况,我是否应该避免完全更改 MVC 助手上生成的 HTML 对象的名称?

我的MVC版本是5.2.2.0,框架运行时版本是:v4.0.30319

我很欣赏这方面的见解。

should I avoid changing the names of the generated HTML objects on the MVC helpers altogether?.

是的。输入元素的名称使模型绑定起作用。

所以不,不是错误。不要改变它们。

你没有解释为什么你想改变它们,但你可以使用不同的属性来完成你想要的。

这不是错误。这是预期的行为。

模型绑定的工作原理是将浏览器以 post 形式发送的 key/value 对绑定到模型属性(或视图数据)。表单输入的 name 属性用作 POST 请求中提交的表单数据的键。

当您使用 HTML 帮助程序呈现表单字段时,框架会自动生成所需的适当 name 属性,以确保该字段将正确绑定到 属性 中指定的您传递给助手的表达式。

如果更改 name,则会破坏表单输入与其绑定的 属性 之间的 连接。