我将以下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片段添加前缀或者更喜欢渲染部分标签。
希望我提供了足够的信息,或者我只是以错误的方式做这件事。从长远来看,要么帮助我,所以提前感谢。
答案 0 :(得分:1)
也许我没有解决问题,但我认为这正是Html.EditorFor(x=>x...)
的用途。
在视图所在的同一目录中创建一个名为“EditorTemplates”的文件夹。将您的部分放在这里并给它们与您的模型类型相同的名称(例如,将“MerchantForm.ascx”重命名为“Merchant.ascx”)。
在主视图中而不是
Html.RenderPartial("MerchantForm", Model.Merchant)
使用
Html.EditorFor(x=>x.Merchant)
模板系统将为您处理前缀,以便在帖子上模型绑定器可以正确地绑定所有内容。
如果您为模型中的所有复杂对象设置了模板,您甚至可以更进一步,只需在主视图上调用
Html.EditorForModel()
这将反映您模型中的属性并致电他们的相关编辑。