Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
por Microsoft
Aproveche las ventajas del enlazador de modelos de anotación de datos para realizar la validación dentro de una aplicación de ASP.NET MVC. Obtenga información sobre cómo usar los distintos tipos de atributos de validador y trabajar con ellos en Microsoft Entity Framework.
En este tutorial, aprenderá a usar los validadores de anotación de datos para realizar la validación en una aplicación de ASP.NET MVC. La ventaja de usar los validadores de anotación de datos es que permiten realizar la validación simplemente agregando uno o varios atributos, como el atributo Required o StringLength, a una propiedad de clase.
Es importante comprender que el enlazador de modelos de anotaciones de datos no es una parte oficial del marco de Microsoft ASP.NET MVC. Aunque el enlazador de modelos de anotaciones de datos fue creado por el equipo de Microsoft ASP.NET MVC, Microsoft no ofrece soporte técnico oficial del producto para el enlazador de modelos de anotaciones de datos descrito y utilizado en este tutorial.
Uso del enlazador de modelos de anotación de datos
Para usar el enlazador de modelos de anotaciones de datos en una aplicación de ASP.NET MVC, primero debe agregar una referencia al ensamblado Microsoft.Web.Mvc.DataAnnotations.dll y al ensamblado System.ComponentModel.DataAnnotations.dll. Seleccione la opción de menú Proyecto, Agregar referencia. A continuación, haga clic en la pestaña Examinar y vaya a la ubicación donde descargó (y descomprimió) el ejemplo de enlazador de modelos de anotaciones de datos (ver figura 1).
Figura 1: Adición de una referencia al enlazador de modelos de anotaciones de datos (haga clic para ver la imagen a tamaño completo)
Seleccione tanto el ensamblado Microsoft.Web.Mvc.DataAnnotations.dll como el ensamblado System.ComponentModel.DataAnnotations.dll y haga clic en el botón Aceptar.
No puede usar el ensamblado System.ComponentModel.DataAnnotations.dll incluido con .NET Framework Service Pack 1 con el enlazador de modelos de anotaciones de datos. Debe usar la versión del ensamblado System.ComponentModel.DataAnnotations.dll incluida con la descarga del ejemplo de enlazador de modelos de anotaciones de datos.
Por último, debe registrar el enlazador de modelos de DataAnnotations en el archivo Global.asax. Agregue la siguiente línea de código al controlador de eventos de Application_Start() para que el método Application_Start() tenga este aspecto:
Protected Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
ModelBinders.Binders.DefaultBinder = New Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder()
End Sub
Esta línea de código registra DataAnnotationsModelBinder como enlazador de modelos predeterminado para toda la aplicación de ASP.NET MVC.
Uso de los atributos del validador de anotación de datos
Al usar el enlazador de modelos de anotaciones de datos, se usan atributos de validador para realizar la validación. El espacio de nombres System.ComponentModel.DataAnnotations incluye los siguientes atributos de validador:
- Range: permite validar si el valor de una propiedad está comprendido entre un intervalo de valores especificado.
- RegularExpression: permite validar si el valor de una propiedad coincide con un patrón de expresión regular especificado.
- Required: permite marcar una propiedad como obligatoria.
- StringLength: permite especificar una longitud máxima para una propiedad de cadena.
- Validation: clase base para todos los atributos de validador.
Nota:
Si ninguno de los validadores estándar satisface sus necesidades de validación, siempre tiene la opción de crear un atributo de validador personalizado heredando un nuevo atributo de validador del atributo base Validation.
La clase Product de la lista 1 muestra cómo usar estos atributos de validador. Las propiedades Name, Description y UnitPrice están marcadas como obligatorias. La propiedad Name debe tener una longitud de cadena inferior a 10 caracteres. Por último, la propiedad UnitPrice debe coincidir con un patrón de expresión regular que representa una cantidad de moneda.
Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations
Public Class Product
Private _id As Integer
Private _name As String
Private _description As String
Private _unitPrice As Decimal
Public Property Id() As Integer
Get
Return _id
End Get
Set(ByVal value As Integer)
_id = value
End Set
End Property
_
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
_
Public Property Description() As String
Get
Return _description
End Get
Set(ByVal value As String)
_description = value
End Set
End Property
_
Public Property UnitPrice() As Decimal
Get
Return _unitPrice
End Get
Set(ByVal value As Decimal)
_unitPrice = value
End Set
End Property
End Class
Lista 1: Models\Product.vb
La clase Product muestra cómo usar un atributo adicional: el atributo DisplayName. El atributo DisplayName permite modificar el nombre de la propiedad cuando se muestra la propiedad en un mensaje de error. En lugar de mostrar el mensaje de error "El campo UnitPrice es obligatorio", puede mostrar el mensaje de error "El campo Precio es obligatorio".
Nota:
Si desea personalizar completamente el mensaje de error que muestra un validador, puede asignar un mensaje de error personalizado a la propiedad ErrorMessage del validador de la siguiente manera: <Required(ErrorMessage:="This field needs a value!")>
Puede usar la clase Product de la lista 1 con la acción del controlador Create() de la lista 2. Esta acción del controlador vuelve a mostrar la vista Create cuando el estado del modelo contiene errores.
Public Class ProductController
Inherits System.Web.Mvc.Controller
'
' GET: /Product/Create
Function Create() As ActionResult
Return View()
End Function
'
' POST: /Product/Create
_
Function Create( ByVal productToCreate As Product) As ActionResult
If Not ModelState.IsValid Then
Return View()
End If
Return RedirectToAction("Index")
End Function
End Class
Lista 2: Controllers\ProductController.vb
Por último, puede crear la vista de la lista 3; para ello, haga clic con el botón derecho en la acción Create() y seleccione la opción de menú Agregar vista. Cree una vista fuertemente tipada con la clase Product como clase de modelo. Seleccione Crear en la lista desplegable de contenido de la vista (ver figura 2).
Figura 2: Adición de la vista Create
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of MvcApplication1.Product)" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>
<% Using Html.BeginForm()%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="Name">Name:</label>
<%= Html.TextBox("Name") %>
<%= Html.ValidationMessage("Name", "*") %>
</p>
<p>
<label for="Description">Description:</label>
<%= Html.TextBox("Description") %>
<%= Html.ValidationMessage("Description", "*") %>
</p>
<p>
<label for="UnitPrice">UnitPrice:</label>
<%= Html.TextBox("UnitPrice") %>
<%= Html.ValidationMessage("UnitPrice", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% End Using %>
<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
Lista 3: Views\Product\Create.aspx
Nota:
Quite el campo Id del formulario Create generado por la opción de menú Agregar vista. Dado que el campo Id corresponde a una columna de identidad, no quiere permitir que los usuarios escriban un valor para este campo.
Si envía el formulario para crear un producto y no especifica valores para los campos obligatorios, se muestran los mensajes de error de validación de la figura 3.
Figura 3: Faltan campos obligatorios
Si escribe un importe de moneda no válido, se muestra el mensaje de error de la figura 4.
Figura 4: Importe de moneda no válido
Uso de validadores de anotación de datos con Entity Framework
Si usa Microsoft Entity Framework para generar las clases del modelo de datos, no puede aplicar los atributos de validador directamente a las clases. Dado que el diseñador de Entity Framework genera las clases de modelo, los cambios que realice en las clases de modelo se sobrescribirán la próxima vez que realice cambios en el diseñador.
Si desea usar los validadores con las clases generadas por Entity Framework, debe crear clases de metadatos. Los validadores se aplican a la clase de metadatos en lugar de aplicar los validadores a la clase real.
Por ejemplo, imagine que ha creado una clase Movie mediante Entity Framework (ver figura 5). Imagine, además, que desea que las propiedades del título de la película y el director sean obligatorias. En ese caso, puede crear la clase parcial y la clase de metadatos de la lista 4.
Figura 5: Clase Movie generada por Entity Framework
Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations
_
Partial Public Class Movie
End Class
Public Class MovieMetaData
Private _title As Object
Private _director As Object
Private _dateReleased As Object
_
Public Property Title() As Object
Get
Return _title
End Get
Set(ByVal value As Object)
_title = value
End Set
End Property
_
Public Property Director() As Object
Get
Return _director
End Get
Set(ByVal value As Object)
_director = value
End Set
End Property
_
Public Property DateReleased() As Object
Get
Return _dateReleased
End Get
Set(ByVal value As Object)
_dateReleased = value
End Set
End Property
End Class
Lista 4: Models\Movie.vb
El archivo de la lista 4 contiene dos clases llamadas Movie y MovieMetaData. La clase Movie es una clase parcial. Corresponde a la clase parcial generada por Entity Framework que se encuentra en el archivo DataModel.Designer.vb.
Actualmente, .NET Framework no admite propiedades parciales. Por lo tanto, no hay ninguna manera de aplicar los atributos de validador a las propiedades de la clase Movie definida en el archivo DataModel.Designer.vb aplicando los atributos de validador a las propiedades de la clase Movie definidas en el archivo de la lista 4.
Observe que la clase parcial Movie está decorada con un atributo MetadataType que apunta a la clase MovieMetaData. La clase MovieMetaData contiene propiedades proxy para las propiedades de la clase Movie.
Los atributos de validador se aplican a las propiedades de la clase MovieMetaData. Las propiedades Title, Director y DateReleased están marcadas como propiedades obligatorias. A la propiedad Director se le debe asignar una cadena que contenga menos de 5 caracteres. Por último, el atributo DisplayName se aplica a la propiedad DateReleased para mostrar un mensaje de error como "El campo Fecha de publicación es obligatorio" en lugar del error "El campo DateReleased es obligatorio".
Nota:
Observe que las propiedades proxy de la clase MovieMetaData no tienen por qué representar los mismos tipos que las propiedades correspondientes de la clase Movie. Por ejemplo, la propiedad Director es una propiedad de cadena en la clase Movie y una propiedad de objeto en la clase MovieMetaData.
En la página de la figura 6, se muestran los mensajes de error devueltos al escribir valores no válidos para las propiedades de Movie.
Figura 6: Uso de validadores con Entity Framework (haga clic para ver la imagen de tamaño completo)
Resumen
En este tutorial, ha aprendido cómo aprovechar las ventajas del enlazador de modelos de anotación de datos para realizar la validación dentro de una aplicación de ASP.NET MVC. Ha aprendido a usar los distintos tipos de atributos de validador, como los atributos Required y StringLength. También ha aprendido a usar estos atributos al trabajar con Microsoft Entity Framework.





