2010-10-05 24 views
0

我有以下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个部分视图。商家信息,地址,商家属性

在我看来,我有一个共享相同的字段名商人,这是“名”

我不能把这些相同的形式造成的名字将在交易模式是相同的。

我最终做的是将所有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

看看http://stackoverflow.com/questions/955371/partial-view-with-parametrized-prefix-for-controls-names我想你是在问一个类似的问题。 – HitLikeAHammer 2010-10-05 23:57:35

回答

1

也许我不是很明白这个问题,但我认为这正是Html.EditorFor(x=>x...)的目的。

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

在你的主视图,而不是

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

使用

Html.EditorFor(x=>x.Merchant)

模板系统将处理前缀你,让在后模型绑定将所有内容联系起来正常。

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

Html.EditorForModel()

这将反映在模型中的属性并致电其相关编辑。

+0

我得看看这个。我总是害怕任何含有单词模板的东西,因为我的客户根本不理解这句话。谢谢 – 2010-10-06 17:01:02

+0

就ASP MVC而言,描述它的一个简单方法基本上就是为你处理前缀的一个部分。 – Chao 2010-10-07 11:57:15