5

I'm trying to start using ViewModels - but I'm having trouble with this POST not validating - the values in the model are shown in the Watch part below the code:

ModelStats.IsValid = false

Invalid ModelState

My ItemViewModel is:

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

I'm sure it will be something simple - but I've just been looking at it so long, I can't figure out what I'm doing wrong. Can anyone please advise?

Thanks, Mark

RickL
  • 3,318
  • 10
  • 38
  • 39
Mark
  • 7,778
  • 24
  • 89
  • 147
  • 1
    The validation of the ViewModel is before you set the `UserName` property, so, I guess, it's null and the validation fails. Why do you need a required user name in your ViewModel anyway? – Zabavsky May 10 '13 at 08:00

2 Answers2

13

As far as Validation failure is concerned.

If you don't intend to supply UserName in the form, then remove the [Required] attribute from ItemViewModel


In order to Use AutoMapper. You need to create a map, such as

 Mapper.CreateMap<Item, ItemViewModel>();

And then map

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

Note: CreateMap has to be created only once, you should register it at Startup. Do read How do I use AutoMapper?.

Satpal
  • 132,252
  • 13
  • 159
  • 168
1

Make sure your ItemViewModel, Item classes have same fields or not. If same fields with same Datatypes AutoMapper works fine.

Mapper.CreateMap< Item, ItemViewModel>();

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

If Fields are not same in both the classes make sure that same with Custom Mapping.

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

In the above Custom Mapping Fullname is UserVM field that maps with FirstName, LastName fields from UserDM (here UserDM is Domain Model, UserVM is View Model).

filhit
  • 2,084
  • 1
  • 21
  • 34
Adi
  • 11
  • 1