SlideShare una empresa de Scribd logo
Validacion de Datos
Danae Aguilar Guzmán
MCT, MS, MCTS, MCP
danae.aguilar@jalasoft.com
Validacion en el servidor
Validación en el servidor
 Siempre validar en el lado del servidor,
porque los usuarios pueden deshabilitar
javascript en sus navegadores.
Data Annotations
 Son atributos definidos en
System.ComponentModel.DataAnnotations
que nos permiten especificar como deben
validarse los datos
Data Annotations
 RegularExpressionAttribute, Los datos
deben matchear una expression regular
dada.
 CompareAttribute, Compara si los valores
de 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; }
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; }
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; }
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);
}
Data Annotations
Para saber si los datos son válidos:
 Preguntar si el valor de ModelState.IsValid
es true
[HttpPost]
public ActionResult CrearEmpleado(Empleado empleado)
{
if (ModelState.IsValid)
{
return View("DatosCreados");
}
return View(new Empleado());
}
Data Annotations
Mensajes de error personalizados:
 Especificar el valor de ErrorMessage
[StringLength(160, ErrorMessage="Ingrese
máximo 160 caracteres")]
public string Apellido { get; set; }
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")
}
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;
}
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;
}
Data Annotations Personalizados
3. Aplicamos nuestro nuevo atributo:
[MaximasPalabras(2)]
public string Apellido { get; set; }
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);
Otros Data Annotations
 Display, permite especificar el texto del
label, y tambien el orden.
 ScaffoldColumn, para marcar las
propiedades que no deben incluirse cuando
usamos EditorForModel o DisplayForModel
[Display(Name = "Ingrese su Apellido", Order = 2)]
public string Apellido { get; set; }
[ScaffoldColumn(false)]
public string Apellido { get; set; }
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; }
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; }
Self Validation
Self Validation
 Son modelos que pueden validarse a si
mismos
 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; }
}

Más contenido relacionado

La actualidad más candente

Oops in PHP
Oops in PHPOops in PHP
Oops in PHP
Mindfire Solutions
 
Document object model
Document object modelDocument object model
Document object model
Amit kumar
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
IT Geeks
 
03 namespace
03 namespace03 namespace
03 namespace
Baskarkncet
 
software-tools-part-1.ppt
software-tools-part-1.pptsoftware-tools-part-1.ppt
software-tools-part-1.ppt
SadiaZar1
 
Visual Studio Profiler
Visual Studio ProfilerVisual Studio Profiler
Visual Studio Profiler
Betclic Everest Group Tech Team
 
External dependencies ,pre init hook &amp; post init hook in odoo
External dependencies ,pre init hook &amp; post init hook in odooExternal dependencies ,pre init hook &amp; post init hook in odoo
External dependencies ,pre init hook &amp; post init hook in odoo
Celine George
 
PHP - Introduction to PHP Error Handling
PHP -  Introduction to PHP Error HandlingPHP -  Introduction to PHP Error Handling
PHP - Introduction to PHP Error Handling
Vibrant Technologies & Computers
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화
NHN FORWARD
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling Models
Stefano Celentano
 
Django Rest Framework - Building a Web API
Django Rest Framework - Building a Web APIDjango Rest Framework - Building a Web API
Django Rest Framework - Building a Web API
Marcos Pereira
 
HTTP Request and Response Structure
HTTP Request and Response StructureHTTP Request and Response Structure
HTTP Request and Response Structure
BhagyashreeGajera1
 
nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제
choi sungwook
 
Span and Div tags in HTML
Span and Div tags in HTMLSpan and Div tags in HTML
Span and Div tags in HTML
Biswadip Goswami
 
JavaScript
JavaScriptJavaScript
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with Overview
Shahed Chowdhuri
 
JavaScript - Chapter 3 - Introduction
 JavaScript - Chapter 3 - Introduction JavaScript - Chapter 3 - Introduction
JavaScript - Chapter 3 - Introduction
WebStackAcademy
 
Using cookies and sessions
Using cookies and sessionsUsing cookies and sessions
Using cookies and sessions
Nuha Noor
 

La actualidad más candente (20)

Oops in PHP
Oops in PHPOops in PHP
Oops in PHP
 
Document object model
Document object modelDocument object model
Document object model
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
 
03 namespace
03 namespace03 namespace
03 namespace
 
software-tools-part-1.ppt
software-tools-part-1.pptsoftware-tools-part-1.ppt
software-tools-part-1.ppt
 
Visual Studio Profiler
Visual Studio ProfilerVisual Studio Profiler
Visual Studio Profiler
 
External dependencies ,pre init hook &amp; post init hook in odoo
External dependencies ,pre init hook &amp; post init hook in odooExternal dependencies ,pre init hook &amp; post init hook in odoo
External dependencies ,pre init hook &amp; post init hook in odoo
 
PHP - Introduction to PHP Error Handling
PHP -  Introduction to PHP Error HandlingPHP -  Introduction to PHP Error Handling
PHP - Introduction to PHP Error Handling
 
Html basics NOTE
Html basics NOTEHtml basics NOTE
Html basics NOTE
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling Models
 
Django Rest Framework - Building a Web API
Django Rest Framework - Building a Web APIDjango Rest Framework - Building a Web API
Django Rest Framework - Building a Web API
 
HTTP Request and Response Structure
HTTP Request and Response StructureHTTP Request and Response Structure
HTTP Request and Response Structure
 
nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제
 
Span and Div tags in HTML
Span and Div tags in HTMLSpan and Div tags in HTML
Span and Div tags in HTML
 
JavaScript
JavaScriptJavaScript
JavaScript
 
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with Overview
 
Dom
DomDom
Dom
 
JavaScript - Chapter 3 - Introduction
 JavaScript - Chapter 3 - Introduction JavaScript - Chapter 3 - Introduction
JavaScript - Chapter 3 - Introduction
 
Using cookies and sessions
Using cookies and sessionsUsing cookies and sessions
Using cookies and sessions
 

Similar a ASP.NET MVC - validacion de datos

Prepared statement
Prepared statementPrepared statement
Prepared statement
Erlin Darwin Herrera cieza
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBC
Carlos Hernando
 
Entrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NETEntrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NET
Haaron Gonzalez
 
PreparedStatement
PreparedStatementPreparedStatement
PreparedStatement
YEIMI DANIEL MARRUFO ADAN
 
preparedStatement
preparedStatementpreparedStatement
preparedStatement
Fiorella Aguilar Isuiza
 
Statement
StatementStatement
Statement
JhiZzelh T Cz
 
CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010
Comunidad SharePoint
 
PREPAREDSTATEMENT
PREPAREDSTATEMENTPREPAREDSTATEMENT
Prepared statement
Prepared statementPrepared statement
Prepared statement
Vilma Anali Pardo Suárez
 
Actividad autónoma: Controles de validacion en ASP.NET
Actividad autónoma: Controles de validacion en ASP.NETActividad autónoma: Controles de validacion en ASP.NET
Actividad autónoma: Controles de validacion en ASP.NETErick Paul Lozada Peñarreta
 
JAVA CON BASE DE DATOS
JAVA CON BASE DE DATOSJAVA CON BASE DE DATOS
JAVA CON BASE DE DATOS
INGRID LESLY CORONEL ACUÑA
 
Connection Java
Connection JavaConnection Java
Connection Java
Percy Zelada Rojas
 
MyBatis como alternativa a Hibernate
MyBatis como alternativa a HibernateMyBatis como alternativa a Hibernate
MyBatis como alternativa a Hibernate
Rubén Aguilera
 
Objeto Sql Command
Objeto Sql CommandObjeto Sql Command
Objeto Sql Command
Thalia Regalado Juape
 
10. consumiendo datos
10. consumiendo datos10. consumiendo datos
10. consumiendo datos
Danae Aguilar Guzmán
 
Preparedstatement
PreparedstatementPreparedstatement
Preparedstatement
EBER CARRERO MENOR
 

Similar a ASP.NET MVC - validacion de datos (20)

Prepared statement
Prepared statementPrepared statement
Prepared statement
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBC
 
Entrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NETEntrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NET
 
PreparedStatement
PreparedStatementPreparedStatement
PreparedStatement
 
06 validación
06 validación06 validación
06 validación
 
preparedStatement
preparedStatementpreparedStatement
preparedStatement
 
Struts2
Struts2Struts2
Struts2
 
Statement
StatementStatement
Statement
 
CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010CSA - Web Parts en SharePoint 2010
CSA - Web Parts en SharePoint 2010
 
Ado
AdoAdo
Ado
 
PREPAREDSTATEMENT
PREPAREDSTATEMENTPREPAREDSTATEMENT
PREPAREDSTATEMENT
 
Prepared statement
Prepared statementPrepared statement
Prepared statement
 
Actividad autónoma: Controles de validacion en ASP.NET
Actividad autónoma: Controles de validacion en ASP.NETActividad autónoma: Controles de validacion en ASP.NET
Actividad autónoma: Controles de validacion en ASP.NET
 
JAVA CON BASE DE DATOS
JAVA CON BASE DE DATOSJAVA CON BASE DE DATOS
JAVA CON BASE DE DATOS
 
Presentacion ajax
Presentacion   ajaxPresentacion   ajax
Presentacion ajax
 
Connection Java
Connection JavaConnection Java
Connection Java
 
MyBatis como alternativa a Hibernate
MyBatis como alternativa a HibernateMyBatis como alternativa a Hibernate
MyBatis como alternativa a Hibernate
 
Objeto Sql Command
Objeto Sql CommandObjeto Sql Command
Objeto Sql Command
 
10. consumiendo datos
10. consumiendo datos10. consumiendo datos
10. consumiendo datos
 
Preparedstatement
PreparedstatementPreparedstatement
Preparedstatement
 

Más de Danae Aguilar Guzmán

Microsoft HoloLens
Microsoft HoloLensMicrosoft HoloLens
Microsoft HoloLens
Danae Aguilar Guzmán
 
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicacionesWPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
Danae Aguilar Guzmán
 
WPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralelaWPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralela
Danae Aguilar Guzmán
 
WPF 08 - manejo y vinculación de datos
WPF 08 - manejo y vinculación de datosWPF 08 - manejo y vinculación de datos
WPF 08 - manejo y vinculación de datos
Danae Aguilar Guzmán
 
WPF 07 - gráficos, animación y multimedia
WPF 07 - gráficos, animación y multimediaWPF 07 - gráficos, animación y multimedia
WPF 07 - gráficos, animación y multimedia
Danae Aguilar Guzmán
 
WPF 06 - personalizando los controles de interfaz de usuario
WPF 06 -  personalizando los controles de interfaz de usuarioWPF 06 -  personalizando los controles de interfaz de usuario
WPF 06 - personalizando los controles de interfaz de usuario
Danae Aguilar Guzmán
 
WPF 05 - triggers y eventos
WPF 05 - triggers y eventosWPF 05 - triggers y eventos
WPF 05 - triggers y eventos
Danae Aguilar Guzmán
 
WPF 04 - reutilizando recursos y estilos en una aplicación WPF
WPF 04 -  reutilizando recursos y estilos en una aplicación WPF WPF 04 -  reutilizando recursos y estilos en una aplicación WPF
WPF 04 - reutilizando recursos y estilos en una aplicación WPF
Danae Aguilar Guzmán
 
WPF 03 - controles WPF
WPF 03 - controles WPF WPF 03 - controles WPF
WPF 03 - controles WPF
Danae Aguilar Guzmán
 
WPF 02 - construyendo una interfaz de usuario
WPF 02  - construyendo una interfaz de usuarioWPF 02  - construyendo una interfaz de usuario
WPF 02 - construyendo una interfaz de usuario
Danae Aguilar Guzmán
 
WPF 01 - introducción
WPF 01 -  introducciónWPF 01 -  introducción
WPF 01 - introducción
Danae Aguilar Guzmán
 
ASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web apiASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web api
Danae Aguilar Guzmán
 
ASP.NET MVC - bundling y minification
ASP.NET MVC - bundling y minificationASP.NET MVC - bundling y minification
ASP.NET MVC - bundling y minification
Danae Aguilar Guzmán
 
ASP.NET MVC - AJAX
ASP.NET MVC - AJAXASP.NET MVC - AJAX
ASP.NET MVC - AJAX
Danae Aguilar Guzmán
 
ASP.NET MVC - implementando globalizacion and localizacion
ASP.NET MVC - implementando globalizacion and localizacionASP.NET MVC - implementando globalizacion and localizacion
ASP.NET MVC - implementando globalizacion and localizacion
Danae Aguilar Guzmán
 
ASP.NET MVC - areas, manejo de estado
ASP.NET MVC - areas, manejo de estadoASP.NET MVC - areas, manejo de estado
ASP.NET MVC - areas, manejo de estado
Danae Aguilar Guzmán
 
ASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVC
Danae Aguilar Guzmán
 
Crecimiento profesional como desarrollador de software
Crecimiento profesional como desarrollador de softwareCrecimiento profesional como desarrollador de software
Crecimiento profesional como desarrollador de software
Danae Aguilar Guzmán
 
09. Creando interfaces de usuario animadas y adaptables
09. Creando interfaces de usuario animadas y adaptables09. Creando interfaces de usuario animadas y adaptables
09. Creando interfaces de usuario animadas y adaptables
Danae Aguilar Guzmán
 
08. Propiedades de estilo HTML box
08. Propiedades de estilo HTML box08. Propiedades de estilo HTML box
08. Propiedades de estilo HTML box
Danae Aguilar Guzmán
 

Más de Danae Aguilar Guzmán (20)

Microsoft HoloLens
Microsoft HoloLensMicrosoft HoloLens
Microsoft HoloLens
 
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicacionesWPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
 
WPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralelaWPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralela
 
WPF 08 - manejo y vinculación de datos
WPF 08 - manejo y vinculación de datosWPF 08 - manejo y vinculación de datos
WPF 08 - manejo y vinculación de datos
 
WPF 07 - gráficos, animación y multimedia
WPF 07 - gráficos, animación y multimediaWPF 07 - gráficos, animación y multimedia
WPF 07 - gráficos, animación y multimedia
 
WPF 06 - personalizando los controles de interfaz de usuario
WPF 06 -  personalizando los controles de interfaz de usuarioWPF 06 -  personalizando los controles de interfaz de usuario
WPF 06 - personalizando los controles de interfaz de usuario
 
WPF 05 - triggers y eventos
WPF 05 - triggers y eventosWPF 05 - triggers y eventos
WPF 05 - triggers y eventos
 
WPF 04 - reutilizando recursos y estilos en una aplicación WPF
WPF 04 -  reutilizando recursos y estilos en una aplicación WPF WPF 04 -  reutilizando recursos y estilos en una aplicación WPF
WPF 04 - reutilizando recursos y estilos en una aplicación WPF
 
WPF 03 - controles WPF
WPF 03 - controles WPF WPF 03 - controles WPF
WPF 03 - controles WPF
 
WPF 02 - construyendo una interfaz de usuario
WPF 02  - construyendo una interfaz de usuarioWPF 02  - construyendo una interfaz de usuario
WPF 02 - construyendo una interfaz de usuario
 
WPF 01 - introducción
WPF 01 -  introducciónWPF 01 -  introducción
WPF 01 - introducción
 
ASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web apiASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web api
 
ASP.NET MVC - bundling y minification
ASP.NET MVC - bundling y minificationASP.NET MVC - bundling y minification
ASP.NET MVC - bundling y minification
 
ASP.NET MVC - AJAX
ASP.NET MVC - AJAXASP.NET MVC - AJAX
ASP.NET MVC - AJAX
 
ASP.NET MVC - implementando globalizacion and localizacion
ASP.NET MVC - implementando globalizacion and localizacionASP.NET MVC - implementando globalizacion and localizacion
ASP.NET MVC - implementando globalizacion and localizacion
 
ASP.NET MVC - areas, manejo de estado
ASP.NET MVC - areas, manejo de estadoASP.NET MVC - areas, manejo de estado
ASP.NET MVC - areas, manejo de estado
 
ASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVC
 
Crecimiento profesional como desarrollador de software
Crecimiento profesional como desarrollador de softwareCrecimiento profesional como desarrollador de software
Crecimiento profesional como desarrollador de software
 
09. Creando interfaces de usuario animadas y adaptables
09. Creando interfaces de usuario animadas y adaptables09. Creando interfaces de usuario animadas y adaptables
09. Creando interfaces de usuario animadas y adaptables
 
08. Propiedades de estilo HTML box
08. Propiedades de estilo HTML box08. Propiedades de estilo HTML box
08. Propiedades de estilo HTML box
 

Último

Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
AbbieDominguezGirond
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
SamuelGampley
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
juanorejuela499
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
Ecaresoft Inc.
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
nicromante2000
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
juanjosebarreiro704
 

Último (6)

Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
 

ASP.NET MVC - validacion de datos

  • 1. Validacion de Datos Danae Aguilar Guzmán MCT, MS, MCTS, MCP danae.aguilar@jalasoft.com
  • 2. Validacion en el servidor Validación en el servidor  Siempre validar en el lado del servidor, porque los usuarios pueden deshabilitar javascript en sus navegadores. Data Annotations  Son atributos definidos en System.ComponentModel.DataAnnotations que nos permiten especificar como deben validarse los datos
  • 3. Data Annotations  RegularExpressionAttribute, Los datos deben matchear una expression regular dada.  CompareAttribute, Compara si los valores de 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; }
  • 4. 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; }
  • 5. 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; }
  • 6. 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); }
  • 7. Data Annotations Para saber si los datos son válidos:  Preguntar si el valor de ModelState.IsValid es true [HttpPost] public ActionResult CrearEmpleado(Empleado empleado) { if (ModelState.IsValid) { return View("DatosCreados"); } return View(new Empleado()); }
  • 8. Data Annotations Mensajes de error personalizados:  Especificar el valor de ErrorMessage [StringLength(160, ErrorMessage="Ingrese máximo 160 caracteres")] public string Apellido { get; set; }
  • 9. 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") }
  • 10. 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; }
  • 11. 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; }
  • 12. Data Annotations Personalizados 3. Aplicamos nuestro nuevo atributo: [MaximasPalabras(2)] public string Apellido { get; set; }
  • 13. 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);
  • 14. Otros Data Annotations  Display, permite especificar el texto del label, y tambien el orden.  ScaffoldColumn, para marcar las propiedades que no deben incluirse cuando usamos EditorForModel o DisplayForModel [Display(Name = "Ingrese su Apellido", Order = 2)] public string Apellido { get; set; } [ScaffoldColumn(false)] public string Apellido { get; set; }
  • 15. 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; }
  • 16. 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; }
  • 17. Self Validation Self Validation  Son modelos que pueden validarse a si mismos  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; } }