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

1
  • 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? Commented May 10, 2013 at 8:00

2 Answers 2

14

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?.

Sign up to request clarification or add additional context in comments.

Comments

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).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.