所以我正在考虑从 MVC 1.0 迁移到 MVC 2.0 RTM。我想开始遵循的约定之一是使用强类型 HTML 帮助器来生成文本框等控件。
但是,看起来这并不是一件容易的事情。我尝试迁移我的第一个表单,替换如下行:
<%= Html.TextBox("FirstName", Model.Data.FirstName, new {maxlength = 30}) %>
...对于这样的行:
<%= Html.TextBoxFor(x => x.Data.FirstName, new {maxlength = 30}) %>
以前,这将映射到 POST 上的适当 View 模型,使用以下方法签名:
[HttpPost]
public ActionResult Registration(AccountViewInfo viewInfo)
相反,它目前返回一个空对象。我相信断开连接的事实是我们将 View 模型传递到一个更大的聚合对象中,该对象具有一些页面元数据和其他有趣的东西(因此 x.Data.FirstName
而不是 x.FirstName)
.
所以我的问题是:使用强类型助手的最佳方式是什么,同时仍然允许 MVC 框架将表单集合适本地转换为我的 View 模型,就像它在原始行中所做的那样?有没有什么方法可以在不更改我们传递给 View 的聚合类型的情况下做到这一点?
谢谢!
更新:所以 bind 属性运行良好,但我不喜欢我必须将它应用到基本上每个已发布的 View 模型的方式。我最终更改了继承层次结构,以便我们所有的 View 模型都继承自包含页面内容和其他元数据的基类,而不是名为 Data
的聚合属性。
最佳答案
public ActionResult Registration([Bind(Prefix = "data")] AccountViewInfo viewInfo);
这告诉 Binder 它应该期望所有值都以 data 开头,因此它将查找 data.FirstName 等。
关于c# - 使用强类型 HTML 助手的 POST 上的 ASP MVC2 模型绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2610929/