部分与视图数据对象

时间:2010-10-05 23:48:54

标签: asp.net-mvc partial-views model-binding

我将以下ViewData传递给视图。

public class MerchantSignUpViewData : BaseViewData
{
    public Merchant Merchant { get; set; }
    public Address Address { get; set; }
    public Deal Deal { get; set; }
    public List<MerchantContact> Contacts { get; set; }
    public int TabIndex { get; set; }
    public List<DealPricing> DealPricing { get; set; }

}

我还创建了3个局部视图。商家信息,地址,商家属性

在我的视图中,我有一个交易模型,与Merchant共享相同的字段名称,即“名称”

我不能把它们放在同一个表格中,因为名字会相同。

我最终做的是将所有10个部分视图放入一个巨大的形式(我此时开始哭泣)并且这样绑定。

<%: Html.TextBoxFor(model => model.Deal.Name)%>
<%: Html.TextBoxFor(model => model.Deal.Name)%>

这为我提供了表单元素的正确名称。

我想做的是以下内容。

<% Html.RenderPartial("MerchantForm", Model.Merchant) %>
<% Html.RenderPartial("DealForm", Model.Deal) %>

但是如何为所有TextBoxFor片段添加前缀或者更喜欢渲染部分标签。

希望我提供了足够的信息,或者我只是以错误的方式做这件事。从长远来看,要么帮助我,所以提前感谢。

1 个答案:

答案 0 :(得分:1)

也许我没有解决问题,但我认为这正是Html.EditorFor(x=>x...)的用途。

在视图所在的同一目录中创建一个名为“EditorTemplates”的文件夹。将您的部分放在这里并给它们与您的模型类型相同的名称(例如,将“MerchantForm.ascx”重命名为“Merchant.ascx”)。

在主视图中而不是

Html.RenderPartial("MerchantForm", Model.Merchant)

使用

Html.EditorFor(x=>x.Merchant)

模板系统将为您处理前缀,以便在帖子上模型绑定器可以正确地绑定所有内容。

如果您为模型中的所有复杂对象设置了模板,您甚至可以更进一步,只需在主视图上调用

Html.EditorForModel()

这将反映您模型中的属性并致电他们的相关编辑。