2014-02-13 51 views
1

我有多個在我的數據庫中有地址字段的表。 例如:將使用automapper生成的模型傳遞給Html.editorformodel()

人:姓名,地址,地址1,cityid,STATEID,countryid,PIN碼,...
公司:名稱,地址,地址1,cityid,STATEID,countryid,PIN碼,...
。 。

相關的ViewModels:

public class customermodel{ 
    public PersonModel basicInfo {get;set;} 
    public string type {get;set;} 
    public long id {get;set;} 
    ... 
} 
public class PersonModel{ 
    public string FirstName {get;set;} 
    public string MiddleName {get;set;} 
    public string LastName {get;set;} 
    public string Email {get;set;} 
    public long Phone {get;set;} 
    public string address {get;set;} 
    public string address1 {get;set;} 
    public long cityid {get;set;} 
    public long stateid {get;set;} 
    public long countryid{get;set;} 
    public long pincode {get;set;} 
} 

我創建了地址類:

public class AddressModel{ 
    public string address {get;set;} 
    public string address1 {get;set;} 
    public long cityid {get;set;} 
    public long stateid {get;set;} 
    public long countryid{get;set;} 
    public long pincode {get;set;} 
} 

(注:我沒有personmodel使用AddressModel使automapper可以在所有的數據拉)

和editortemplate對於同在/Views/Shared/EditorTemplates/AddressModel.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AddressModel>" %> 

<%: Html.TextBoxFor(model => model.address, new { Placeholder = "Country" })%> 
<%: Html.TextBoxFor(model => model.address1, new { Placeholder = "State", style="display:none;" })%> 
... 

從我的EditCustomer視圖中,我想調用地址模型的編輯器模板。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CustomerModel>" %> 

<%: Html.TextBoxFor(model => model.id) %> 
<%: Html.TextBoxFor(model => model.type) %> 
<%: Html.EditorFor(model => (AddressModel)AutoMapper.Mapper.DynamicMap<AddressModel>(model.personModel), "AddressModel")%> 
... 

現在我得到以下錯誤的EditorFor行:
模板只能與現場訪問,屬性訪問,一維數組的索引,或者單參數定製索引表達式中使用。

我想用Html.EditorForModel("AddressModel");,但我拋出一個錯誤
「System.InvalidOperationException:傳遞到字典的模型產品類型‘CustomerModel’的,但這種字典需要類型的模型項目'AddressModel'」。
我不知道如何將automapper生成的addressmodel傳遞給editortemplate在這種情況下。

我不能使用partialViews,因爲我希望在這種情況下地址字段的前綴是basicInfo,而在另一種情況下我不需要任何前綴。

這讓我瘋狂了幾天。請幫忙!!!

回答