2011-10-12 146 views
2

我試圖改進我的MVC 3模型和視圖(主要是CRUD)之間的數據流。我採取了使用ViewModels和FormModels的方法。我的ViewModel包含了表示視圖FormData,DropDownLists等所需的一切。FormModel只包含表單提交的FormData字段,這些字段是更新記錄所需的。AutoMapper可以將對象映射到相同類型的模型屬性

我的問題是我可以使用AutoMapper將UserDto信息映射到我的ViewModel中的FormData字段?

顯然我的下面的映射只是在兩個對象之間進行映射,而不是對象到屬性,但我嘗試過使用'.ForMember'映射選項,但它們又是對象成員而不是對象成員。我也看過自定義類型轉換器,但不知道這是否正確。

Mapper.CreateMap<UserDto, UserViewModel>(); 
Mapper.CreateMap<UserViewModel, UserDto>(); 

public class UserViewModel 
{ 
    public User FormData { get; set; } 

    // DropDownLists 

    // Other view specific data 

} 

public class UserFormModel 
{ 
    public int UserId { get; set; } 

    [Required] 
    public string Name { get; set; } 

    [Required] 
    public string Age { get; set; } 

    [Required] 
    public string Email { get; set; } 
} 

任何幫助將不勝感激。

+0

你有什麼錯誤嗎?什麼是確切的問題? – Kangkan

+0

當我驗證AutoMapper配置有效與Mapper.AssertConfigurationIsValid();它告訴我FormData字段沒有被映射,我需要添加一個自定義映射表達式,忽略或重命名我知道的屬性。我只需要了解我是如何完成映射的。如果沒有,我只是手動地圖? – Cragly

+0

是的,對於每種類型,您需要進行映射。 – Kangkan

回答

5

您需要創建映射到FormData屬性類型,然後告訴AutoMapper使用此映射。

(以下內容可能無法編譯;我正在重新創建我的工作機器,並且正在從內存中運行)。

Mapper.CreateMap<UserDto, User>(); // set up property mapping 

Mapper.CreateMap<UserDto, UserViewModel>() 
.ForMember(vm => vm.FormData, map => map.MapFrom(dto => Mapper.Map<UserDto, User>(dto))); 
+0

非常感謝您的回答,但仍然無法正常工作。仍然說非屬性映射,我需要進行自定義映射。現在花很長時間,所以可能只是手動做! – Cragly

+0

實際上回到它並得到它與提供的確切代碼工作。只有錯字是我用.ForMember而不是.ForProperty。非常感謝。 – Cragly

+0

很高興爲你效勞! – egoodberry

相關問題