c# - 使用强类型 HTML 助手的 POST 上的 ASP MVC2 模型绑定(bind)问题

标签 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 上的适当 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/

相关文章:

c# - 如何使用 C# 在 Json 中通过键的名称获取值列表

asp.net-mvc - 我可以从 HttpContext 获取 Controller 吗?

html - 下载属性在 safari 中不起作用

c# - 如何将抽象类转换为T类型?

c# string to float 转换不正确

asp.net-mvc - 如何在 MVC2 中使用子域作为路由值

asp.net-mvc-2 - Firefox 6 使用带有哈希标签的页面无限刷新

python - 为什么 setattr 和 getattr 允许空格?

.net - 版本敏感的 ObsoleteAttribute

C# linq 选择列表中的对象查看另一个对象列表