我有下面的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共享相同的字段名称,即"Name“
我不能把它们放在相同的形式,因为它们的名字是一样的。
我最终做的是将所有10个部分视图放入一个巨大的表单中(我在这一点上开始哭了),并像这样绑定。
<%: Html.TextBoxFor(model => model.Deal.Name)%>
<%: Html.TextBoxFor(model => model.Deal.Name)%>这为我提供了表单元素的正确名称。
我想做的事情如下。
<% Html.RenderPartial("MerchantForm", Model.Merchant) %>
<% Html.RenderPartial("DealForm", Model.Deal) %>但是我如何给所有的TextBoxFor片段添加一个前缀,或者最好是渲染部分标记。
希望我提供了足够的信息,或者我只是做错了。从长远来看,这两种方法都会对我有所帮助,所以提前谢谢你。
发布于 2010-10-06 19:13:07
也许我没有完全理解这个问题,但我认为这正是Html.EditorFor(x=>x...)的作用所在。
在视图所在的目录中创建一个名为"EditorTemplates“的文件夹。在这里输入你的分音,并给他们与你的模型类型相同的名称(例如,将"MerchantForm.ascx“重命名为"Merchant.ascx")。
在您的主视图中,而不是
Html.RenderPartial("MerchantForm", Model.Merchant)
使用
Html.EditorFor(x=>x.Merchant)
模板系统将为您处理前缀,因此在post时,模型绑定器将正确地绑定所有内容。
如果您已经为模型中的所有复杂对象设置了模板,那么您甚至可以更进一步,在您的主视图上只需调用
Html.EditorForModel()
它将反映模型中的属性,并调用它们的相关编辑器。
https://stackoverflow.com/questions/3868601
复制相似问题