带有强类型HTML帮助程序的POST上的MV MVC2模型绑定问题

时间:2010-04-09 21:07:58

标签: c# asp.net-mvc-2 attributes model-binding asp.net-mvc-2-validation

所以我正在考虑从 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框架将表单集合适当地转换为我的视图模型,就像在原始行中一样?有没有办法在不改变我们传递给视图的聚合类型的情况下做到这一点?

谢谢!

更新:因此绑定属性运行良好,但我不喜欢我必须将它应用于基本上每个发布的视图模型。我最终更改了继承层次结构,以便所有视图模型都从包含页面内容和其他元数据的基类继承,而不是名为Data的聚合属性。

1 个答案:

答案 0 :(得分:5)

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

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