2013-05-10 18 views
5

我試圖使用ViewModels開始 - 但我遇到了這個POST的問題沒有驗證 - 模型中的值顯示在代碼下方的Watch部分中:在ASP.Net中使用AutoMapper的正確方法MVC

ModelStats.IsValid =假

Invalid ModelState

我ItemViewModel是:

public class ItemViewModel 
    { 
    public int ItemId { get; set; } 
    [Display(Name = "Item")] 
    public string ItemName { get; set; } 
    [Display(Name = "Description")] 
    public string Description { get; set; } 
    [Display(Name = "Price")] 
    public double UnitPrice { get; set; } 
    [Range(0.00, 100, ErrorMessage = "VAT must be a % between 0 and 100")] 
    public decimal VAT { get; set; } 
    [Required] 
    public string UserName { get; set; } 
    } 

我相信這會很簡單 - 但我只是看了這麼長時間,我無法弄清楚我做錯了什麼。任何人都可以請指教?

謝謝,馬克

+1

ViewModel的驗證是在設置'UserName'屬性之前,所以我猜它是空的,驗證失敗。無論如何,你爲什麼需要ViewModel中所需的用戶名? – Zabavsky 2013-05-10 08:00:52

回答

11

就驗證失敗而言。

如果您沒有在形式提供UserName,然後從ItemViewModel

刪除[必填爲了使用AutoMapper

首先,創建一個映射,如

Mapper.CreateMap<Item, ItemViewModel>(); 

而且那麼地圖

var itemModel = Mapper.Map<Item, ItemViewModel>(model); 

請參閱:如何使用AutoMapper?部分在https://github.com/AutoMapper/AutoMapper/wiki/Getting-started

+0

嗨 - 感謝 - 這是ModelState,它不驗證 - 所以沒有達到映射器。你能看到有什麼問題嗎?謝謝,Mark – Mark 2013-05-10 08:00:07

+0

@fixit,如果'ModelState'無效,那麼你已經把一些失敗的驗證,'ModelState'與* AutoMapper * – Satpal 2013-05-10 08:02:38

+0

@fixit無關。你是否在表單中提供'UserName'?如果沒有,從viewModel – Satpal 2013-05-10 08:08:19

1

確保您的ItemViewModel,Item類具有相同的字段與否。如果具有相同數據類型AutoMapper的相同字段正常工作。

Mapper.CreateMap< Item, ItemViewModel>(); 

Mapper.Map< Item, ItemViewModel>(ItemVM); 

如果兩個類的字段不相同,請確保與自定義映射相同。

Mapper.CreateMap<UserDM, UserVM>().ForMember(emp => emp.Fullname, 
map => map.MapFrom(p => p.FirstName + " " + p.LastName)); 

在上述自定義映射FullnameUserVM字段與FirstName,從UserDMLastName字段映射(這裏UserDM是域模型,UserVM是視圖模型)。

相關問題