ASP.NET MVC - validacion de datos

17
Validacion de Datos Danae Aguilar Guzmán MCT, MS, MCTS, MCP [email protected]

Transcript of ASP.NET MVC - validacion de datos

Page 1: ASP.NET MVC - validacion de datos

Validacion de Datos

Danae Aguilar Guzmán MCT, MS, MCTS, MCP

[email protected]

Page 2: ASP.NET MVC - validacion de datos

Validacion en el servidor

Validación en el servidor

Siempre validar en el lado del servidor, porque los usuarios pueden deshabilitarjavascript en sus navegadores.

Data Annotations

Son atributos definidos en System.ComponentModel.DataAnnotationsque nos permiten especificar como debenvalidarse los datos

Page 3: ASP.NET MVC - validacion de datos

Data Annotations

RegularExpressionAttribute, Los datosdeben matchear una expression regular dada.

CompareAttribute, Compara si los valoresde 2 propiedades del modelo son iguales

[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}")] public string Email { get; set; }

[Compare("Email")] public string ConfirmacionEmail { get; set; }

Page 4: ASP.NET MVC - validacion de datos

Data Annotations

RequiredAttribute, Indica que se require un valor

StringLengthAttribute, El maximo de caracteres permitidos.

[Required] public string Nombre { get; set; }

[StringLength(160)] public string Apellido { get; set; }

[StringLength(160, MinimumLength = 3)] public string Nombre { get; set; }

Page 5: ASP.NET MVC - validacion de datos

Data Annotations

RangeAttribute, Especifica un rango de valores permitidos.

[Range(21, 50)] public int Edad { get; set; }

[Range(typeof(decimal), "0.50", "89.99")] public decimal Precio { get; set; }

[Range(typeof(DateTime), "1/1/2013", "12/31/9999")] public DateTime FechaInicio { get; set; }

Page 6: ASP.NET MVC - validacion de datos

Data Annotations

RemoteAttribute, Hace que jQuery Validate llame a una accion en el server para realizer la validación

Especificamos el action y el controller:

El action realiza la validación:

[Remote("ValidarNombreUsuario", "Cuentas")] public string NombreUsuario { get; set; }

public JsonResult ValidarNombreUsuario(string nombreUsuario) { List<string> usuarios = new List<string>() {"Juanito", "Pepito"}; // Alguna valicadion: bool resultado = usuarios.Any(u => u == nombre); return Json(resultado, JsonRequestBehavior.AllowGet); }

Page 7: ASP.NET MVC - validacion de datos

Data Annotations

Para saber si los datos son válidos:

Preguntar si el valor de ModelState.IsValides true

[HttpPost] public ActionResult CrearEmpleado(Empleado empleado) { if (ModelState.IsValid) { return View("DatosCreados"); } return View(new Empleado()); }

Page 8: ASP.NET MVC - validacion de datos

Data Annotations

Mensajes de error personalizados:

Especificar el valor de ErrorMessage

[StringLength(160, ErrorMessage="Ingrese máximo 160 caracteres")] public string Apellido { get; set; }

Page 9: ASP.NET MVC - validacion de datos

Data Annotations

Mostrando los errorres:

Agregamos jqueryval:

@using (Html.BeginForm()) { @Html.ValidationSummary() <p> @Html.LabelFor(model => model.Apellido) @Html.EditorFor(model => model.Apellido) @Html.ValidationMessageFor(model => model.Apellido, "*") </p> <input type="submit" value="OK" /> }

@section scripts { @Scripts.Render("~/bundles/jqueryval") }

Page 10: ASP.NET MVC - validacion de datos

Data Annotations Personalizados

1. Creamos una clase que herede de ValidationAttribute:

public class MaximasPalabrasAttribute : ValidationAttribute { private int maximoPalabras; public MaximasPalabrasAttribute(int maximoPalabras) { this.maximoPalabras = maximoPalabras; }

Page 11: ASP.NET MVC - validacion de datos

Data Annotations Personalizados

2. Sobreescribimos el metodo IsValid:

protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value != null) { var cadena = value.ToString(); if (cadena.Split(' ').Length > maximoPalabras) { return new ValidationResult("Muchas palabras!"); } } return ValidationResult.Success; }

Page 12: ASP.NET MVC - validacion de datos

Data Annotations Personalizados

3. Aplicamos nuestro nuevo atributo:

[MaximasPalabras(2)] public string Apellido { get; set; }

Page 13: ASP.NET MVC - validacion de datos

Data Annotations Personalizados

3.2. Permitir mensajes de error diferentes:

En el constructor:

Retornando el error:

public MaximasPalabrasAttribute(int maximoPalabras) : base("{0} tiene muchas palabras.") {

var mensaje = FormatErrorMessage(validationContext.DisplayName); return new ValidationResult(mensaje);

Page 14: ASP.NET MVC - validacion de datos

Otros Data Annotations

Display, permite especificar el texto del label, y tambien el orden.

ScaffoldColumn, para marcar laspropiedades que no deben incluirse cuandousamos EditorForModel o DisplayForModel

[Display(Name = "Ingrese su Apellido", Order = 2)] public string Apellido { get; set; }

[ScaffoldColumn(false)] public string Apellido { get; set; }

Page 15: ASP.NET MVC - validacion de datos

Otros Data Annotations

DisplayFormat, permite especificar el format de los datos.

ReadOnly, no se modificara el valor del modelo con los datos que ingrese el usuario

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")] public decimal Total { get; set; }

[ReadOnly(true)]

public decimal Total { get; set; }

Page 16: ASP.NET MVC - validacion de datos

Otros Data Annotations

DataType, permite especificar el tipo de los datos.

HiddenInput, Los datos se enviaran en un input oculto par ael usuario

[DataType(DataType.Password)] public string Password { get; set; }

[HiddenInput] public string Apellido { get; set; }

Page 17: ASP.NET MVC - validacion de datos

Self Validation

Self Validation

Son modelos que pueden validarse a simismos

Implementan la interfaz IValidatableObject

public class Estudiante : IValidatableObject { public IEnumerable<ValidationResult> Validate( ValidationContext validationContext) { if (Apellido != null && Apellido.Split(' ').Length > 2) { yield return new ValidationResult("El apellido es incorrecto!", new[] { "Apellido" }); } } public string Apellido { get; set; } }