3

所以我正在考虑从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 上的适当视图模型:

[HttpPost]
public ActionResult Registration(AccountViewInfo viewInfo)

相反,它当前返回一个空对象。我相信这种脱节在于我们将视图模型传递到一个更大的聚合对象中,该对象具有一些页面元数据和其他有趣的东西(因此x.Data.FirstName而不是x.FirstName).

所以我的问题是:使用强类型助手的最佳方法是什么,同时仍然允许 MVC 框架像在原始行中那样将表单集合适当地转换为我的视图模型?有没有办法在不改变我们传递给视图的聚合类型的情况下做到这一点?

谢谢!

更新:所以 bind 属性工作得很好,但我不喜欢我必须将它应用于基本上每个发布的视图模型。我最终改变了继承层次结构,这样我们所有的视图模型都继承自一个包含页面内容和其他元数据的基类,而不是一个名为Data.

4

1 回答 1

5
public ActionResult Registration([Bind(Prefix = "data")] AccountViewInfo viewInfo);

这告诉绑定器它应该期望所有值都以data开头,因此它将查找data.FirstName等。

于 2010-04-09T21:19:07.487 回答