Exclude Fields From Model Validation
Asked Answered
E

2

7

Let's say I have a following ViewModel :

    public class PersonViewModel
    {
        [Required]
        public String Email { get; set; }

        [Required]
        public String FirstName { get; set; }

        [Required]
        public String LastName { get; set; }
    }

This is a ViewModel not a original Entity, I use this model in two places, in the first one I want to validate all fields, but in another one I want to exclude Email field from model validation. Is there anyway to specify to exclude field(s) from validation?

Extremist answered 28/4, 2013 at 19:40 Comment(0)
C
13

You can use

ModelState.Remove("Email");

to remove entries in model state, that are related to hidden fields.

The best solution is to divide view model into two:

public class PersonViewModel
{
    [Required]
    public String FirstName { get; set; }

    [Required]
    public String LastName { get; set; }
}

public class PersonWithEmailViewModel : PersonViewModel
{
    [Required]
    public String Email { get; set; }
}
Collen answered 28/4, 2013 at 19:43 Comment(3)
Thanks for you reply, but what about using [Bind(Exclude = "IsAdmin")] ?Extremist
@EAmani: Bind exludes from binding, not validation. If you don't want to have these problems, create dedicated view model.Collen
Great answer, I separated one class into two and made one a super class of the other, made my validation easierCistaceous
L
8

An ugly solution:

ModelState.Remove("Email");

Recommended solution:
Create another ViewModel. A VM is supposed to represent your view, so if your view has no Email field, make a suitable VM for it.

Lubberly answered 28/4, 2013 at 19:44 Comment(1)
Thanks for reply, yes you are right, its better to create another VM for my second view.Extremist

© 2022 - 2024 — McMap. All rights reserved.