Can I select which validations of a property of a class to use according to what view?

1
//Propiedad de la clase "Usuario" con sus respectivas validaciones
[ValidateDNIRepetit(ErrorMessage = "El correo ya existe")]
[Required(ErrorMessage = "El campo no puede estar vacio")]
[EmailAddress(ErrorMessage = "No es una dirección de correo válida")]
public string Email { get; set; }  

//Implementación de la propiedad de dicha clase en cualquier vista Razor, pues la uso en varias
 <div class="form-group">
    @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
      @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
      @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
   </div>
 </div>

Do I have any way of choosing in a particular view which of the 3 validations of the property to use? Well, in one of the forms I do not need the validation "ValidateDNIRepetit", but the other 2 yes. Thanks

    
asked by Xavier 14.03.2016 в 17:43
source

1 answer

3

Using only Asp.Net MVC the correct way would be to create a class Model for each view depending on which validation you want to apply.

That is, you would have two model classes and each controller action assigns the view according to the validation that is required.

public class UsuarioModelCreate{

    [ValidateDNIRepetit(ErrorMessage = "El correo ya existe")]
    [Required(ErrorMessage = "El campo no puede estar vacio")]
    [EmailAddress(ErrorMessage = "No es una dirección de correo válida")]
    public string Email { get; set; }  

}

public class UsuarioModelEdit{

    [Required(ErrorMessage = "El campo no puede estar vacio")]
    [EmailAddress(ErrorMessage = "No es una dirección de correo válida")]
    public string Email { get; set; }  

}


public class xxController: Controller{

    public ActionResult Create(){

        UsuarioModelCreate model = new UsuarioModelCreate();

        return View(model);
    }

    public ActionResult Edit(){

        UsuarioModelEdit model = new UsuarioModelEdit();

        return View(model);
    }

}
    
answered by 14.03.2016 / 18:20
source