在ASP.Net MVC中使用AutoMapper的正确方法

时间:2013-05-10 07:51:13

标签: c# asp.net-mvc asp.net-mvc-3 automapper

我正在尝试开始使用ViewModels - 但是我遇到了这个POST无法验证的问题 - 模型中的值显示在代码下方的Watch部分中:

ModelStats.IsValid = false

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; }
   }

我确信这会很简单 - 但我一直在看它这么久,我无法弄清楚我做错了什么。任何人都可以建议吗?

谢谢,Mark

2 个答案:

答案 0 :(得分:11)

就验证失败而言。

如果您未在表单中提供UserName,请从ItemViewModel

中删除[必填]

为了使用AutoMapper

首先,创建一个地图,例如

 Mapper.CreateMap<Item, ItemViewModel>();

然后映射

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

参考:{em>如何使用AutoMapper?部分https://github.com/AutoMapper/AutoMapper/wiki/Getting-started

答案 1 :(得分:1)

确保您的ItemViewModelItem类具有相同的字段。如果具有相同数据类型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字段,其中FirstNameLastName字段来自UserDM(此处UserDM是域名模型,UserVM是视图模型)。