2014-01-09 111 views
1

所以我發現,使用視圖模型更好。它說它會阻止我從'spegetti代碼',好吧,我喜歡那樣。驗證視圖模型根據模型

我不認爲這是一個好主意,重複我對每個視圖模型的驗證,所以我發現automapper,我試着這個,但它不工作我做錯了什麼?

感謝

[HttpPost] 
    public ActionResult AddProvider(ProviderNewVM providerVM) 
    { 
     Provider provider = Mapper.Map<Provider>(providerVM); 
     UpdateModel(provider); 
     if (ModelState.IsValid) 
     { 
      return Content("ok");  
     } 
     return Content("nope"); 
    } 

我的模型:

public class Provider 
{ 
    public int Id { get; set; } 

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

我的視圖模型:

public class ProviderNewVM 
{ 
    public string Name { get; set; } 
    public string Phone { get; set; } 
    public string Email { get; set; } 
} 

我想從我的觀點recive一個ProviderNewVM類,並轉換成我的模型我的控制器到提供者類,所以我可以驗證我的模型驗證。

索裏,我得到一個錯誤的(類型的模型 'Controli_web.Models.Provider' 無法更新)

UpdateModel(provider); 

然後我改變該行:

TryUpdateModel(provider); 

它的型號總是有效的

+1

什麼不工作?附:無論您是否有視圖模型,您都可以編寫意大利麪代碼。 –

+0

這不是驗證,我會更新我的模型。 –

回答

0

試試這個,在你的AddProvider動作中:

[HttpPost] 
public ActionResult AddProvider(ProviderNewVM providerVM) 
{ 
    Mapper.CreateMap<ProviderNewVM , Provider>(); 
    Provider provider = Mapper.Map<ProviderNewVM,Provider>(providerVM); 
    UpdateModel(provider); 
    if (ModelState.IsValid) 
    { 
     return Content("ok");  
    } 
    return Content("nope"); 
} 
+0

我在我的global.asax(Mapper.CreateMap ();) –