2

我有一份保险登记表,上面有两个人的联系信息。我为联系人条目创建了一个 Razor 局部视图,并将其放入表单中两次。“主”视图模型 (VmApplicationForm) 包含对应于两个联系人的子视图模型 (VmPolicyHolder) 的两个实例以及两个联系人共有的一些属性。我正在打电话@Html.RenderPartial("_CreateOrEdit", Model.contactInfo1)@Html.RenderPartial("_CreateOrEdit", Model.contactInfo2)在页面中。通过这种安排(毫不奇怪),呈现的代码具有重复的表单输入元素 ID。

有没有办法让 RenderPartial 为 ID 和 Name 属性添加前缀?我在文档中看不到这一点,但也许我错过了一些东西。

4

2 回答 2

4

对不起,我还没有时间给你示例代码,但我会给你想法。您应该首先为那个可能被称为类的类创建EditorTemplateContactInfo。然后,在基类(持有两个联系人)编辑视图中,你应该写

@Html.EditorFor(model => model.contactInfo1)
@Html.EditorFor(model => model.contactInfo2)

这样,它将呈现该 EditorTemplate 并为其中的输入生成正确的 ID 和名称。

于 2011-08-03T16:15:27.103 回答
-1

您正在做的是尝试在表单中发布项目集合 - 这确实可以在 MVC 中完成(以及在任何使用 FORM 标签的网页/应用程序中),但是它需要一些特殊处理以避免 id 冲突并正确格式化发布数据。史蒂夫·桑德森 (Steve Sanderson) 有一篇关于如何实现此目的的精彩帖子:

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

本质上,它是一个包装器,用于将唯一的 guid 附加到元素 ID(在您的情况下为每个contactInfo),并在标签中创建正确的数组格式。例如<input name="ContactInfo[f2cc4d6b-fc32-45e9-9d3d-fce54c3fede3].FirstName">

如果您的模型类似于 ContactInfo,您最终会发布类似

[HttpPost]
public ActionResult Index(IEnumerable<ContactInfo> contacts)
{
    // To do: do whatever you want with the data
}
于 2011-08-03T16:24:16.237 回答