2014-01-09 110 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 ();) –