Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.
Traducción
Original

Cómo: Validar los datos del modelo mediante los atributos de DataAnnotations

En este tema se muestra cómo utilizar los atributos del espacio de nombres System.ComponentModel.DataAnnotations para especificar la validación de campos individuales en el modelo de datos. Estos atributos definen modelos de la validación comunes, como la comprobación de intervalos y los campos obligatorios. Los atributos de System.ComponentModel.DataAnnotations hacen que MVC proporcione comprobaciones de validación del cliente y del servidor sin que tenga que programar código adicional.

Los atributos de System.ComponentModel.DataAnnotations se pueden utilizar con diversos modelos de datos, tales como Entity Data Model (EDM), LINQ to SQL, etc. También puede crear atributos de validación personalizados. Para obtener más información, vea How to: Customize Data Field Validation in the Data Model Using Custom Attributes.

Hay un proyecto de Visual Studio con código fuente disponible para este tema: Descargar.

En la siguiente ilustración se muestran los mensajes de error que aparecen automáticamente en un explorador cuando se produce un error de validación del lado cliente.

Mensajes mostrados en el explorador en respuesta a errores de validación

Errores de validación

Para agregar validación mediante los atributos de DataAnnotations

  1. Agregue una clase al proyecto para que contenga las definiciones de clase parcial. Para obtener más información, vea How to: Customize Data Field Validation in the Data Model.

  2. Agregue una declaración de espacio de nombres a la clase parcial que coincida con el espacio de nombres del modelo de datos que está utilizando.

    NotaNota:

    Si se utiliza un espacio de nombres incorrecto en una clase parcial, se genera una clase parcial de tipo naked, que es una clase parcial que no está asociada a ninguna otra. Una clase parcial de tipo naked es uno de los motivos típicos por los que el modelo de datos no reconoce los atributos de DataAnnotations. Para evitar este problema, puede copiar el espacio de nombres del código del modelo de datos para asegurarse de tener el espacio de nombres correcto.

  3. Dé a la clase parcial un nombre que coincida con la declaración de clase que representa la tabla en el modelo de datos y péguela en el nuevo archivo de clase.

    NotaNota:

    Es importante que los nombres de clase coincidan exactamente. La manera más fácil de asegurarse de que el nombre de la clase parcial coincide, es copiarlo.

    En el siguiente ejemplo se muestra una clase parcial para la tabla Product de la base de datos de ejemplo AdventureWorksLT_2008. En este ejemplo, el espacio de nombres MvcDA representa la base de datos.

    using System.ComponentModel.DataAnnotations;  
    namespace MvcDA {
        [MetadataType(typeof(ProductMD))]
        public partial class Product {
            public class ProductMD {
                [StringLength(50),Required]
                public object Name { get; set; }
                [StringLength(15)]
                public object Color { get; set; }
                [Range(0, 9999)]
                public object Weight { get; set; }
              //  public object NoSuchProperty { get; set; }
            }
        }
    }
    

    Imports System.ComponentModel.DataAnnotations
    
    <MetadataType(GetType(ProductMD))> _
    Partial Public Class Product
    End Class
    
    Public Class ProductMD
        Private _Name As Object
        <StringLength(60)> _
        <Required()> _
        Public Property Name() As Object
            Get
                Return _Name
            End Get
            Set(ByVal value As Object)
                _Name = value
            End Set
        End Property
    
        Private _Color As Object
        <StringLength(60)> _
        Public Property Color() As Object
            Get
                Return _Color
            End Get
            Set(ByVal value As Object)
                _Color = value
            End Set
        End Property
    
        Private _Weight As Object
        <Required(), StringLength(50)> _
        Public Property Weight() As Object
            Get
                Return _Weight
            End Get
            Set(ByVal value As Object)
                _Weight = value
            End Set
        End Property
    
        'Private _NoSuchProperty As Object
        '<Required(), StringLength(30)> _
        'Public Property NoSuchProperty() As Object
        '    Get
        '        Return _NoSuchProperty
        '    End Get
        '    Set(ByVal value As Object)
        '        _NoSuchProperty = value
        '    End Set
        'End Property
    
    End Class
    
    NotaNota:

    La propiedad denominada NoSuchProperty se incluye en la clase y se marca como comentario. Puede utilizar esta propiedad para probar la clase parcial, tal como se explica más adelante en este tema.

  4. Cree una clase asociada (denominada en ocasiones una clase relacionada) que contenga las propiedades de la clase parcial que representa la tabla.

    La clase asociada puede tener cualquier nombre; una convención es anexar "MD" o "MetaData" al nombre de clase de la tabla. La clase asociada se debe utilizar con los modelos EDM o LINQ to SQL porque los tipos CLR no pueden marcar las propiedades existentes con nuevos atributos. Si trabaja directamente con objetos CLR, a veces conocidos como tipos de objetos CLR antiguos sin formato (POCO), puede aplicar directamente los atributos al modelo.

  5. Asocie la nueva clase a la clase de tabla mediante el atributo MetadataTypeAttribute.

    En el ejemplo anterior, la nueva clase se asocia a la clase de tabla en las siguientes líneas:

    [MetadataType(typeof(ProductMD))]
    

    <MetadataType(GetType(ProductMD))> _
    
  6. Aplique los atributos System.ComponentModel.DataAnnotations a las propiedades. Puede aplicar cualquier cantidad de atributos a cada propiedad.

Si no se reconocen las anotaciones de datos que ha aplicado, debe comprobar que la clase parcial se reconoce en el proyecto. En el siguiente procedimiento se propone una manera de probar la clase.

Para probar la clase parcial

  1. Agregue una propiedad a la clase parcial cuyo nombre no coincide con una propiedad del modelo de datos correspondiente.

    Por ejemplo, quite el comentario de la propiedad NoSuchProperty que se muestra en el ejemplo del procedimiento anterior.

  2. Ejecute el proyecto y escriba los datos que se van a validar.

    Si se reconoce la clase parcial, al realizar la validación se produce una excepción InvalidOperationException y se muestra un mensaje similar al siguiente:

    El tipo de metadatos asociado del tipo 'MvcDA.Product' contiene las siguientes propiedades o campos desconocidos: NoSuchProperty. Compruebe que los nombres de estos miembros coinciden con los nombres de las propiedades en el tipo principal.

    Si la clase parcial es de tipo naked, no se produce ninguna excepción. En ese caso, examine el nombre de la clase parcial para asegurarse de que coincide con el nombre de clase correspondiente del modelo de datos y que se ha utilizado el espacio de nombres correcto.

  3. Quite la propiedad de la clase parcial que agregó para efectuar las pruebas.

Después de agregar la validación del lado servidor, puede agregar la validación del lado cliente incluyendo los archivos de validación de JavaScript necesarios y habilitando la validación del lado cliente.

Para agregar la validación de cliente

  • Agregue las referencias a los archivos de validación de JavaScript a la vista que contiene los elementos que desea validar. (Una práctica común es incluirlas en el archivo Site.master de modo que se apliquen a cada vista).

    En el siguiente ejemplo se muestra cómo hacer referencia a los archivos JavaScript necesarios para incluir la validación del lado cliente. (En este ejemplo, las referencias se realizan a las versiones de depuración de las bibliotecas). El ejemplo también muestra cómo llamar al método EnableClientValidation para habilitar la validación del lado cliente. Un modo habitual de habilitar la validación del cliente es agregar el siguiente código al archivo Site.master. Sin embargo, también puede agregarlo a la página de vista que está implementando la validación del lado cliente. Si incluye el siguiente código en la página maestra, cada vista habilitará automáticamente la validación del lado cliente.

    <head runat="server">
      <script src="<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") %>" type="text/javascript"></script>
      <script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js") %>" type="text/javascript"></script>
      <script src="<%= Url.Content("~/Scripts/MicrosoftMvcValidation.debug.js") %>" type="text/javascript"></script>
      <% Html.EnableClientValidation();%>
    </head> 
    

    <head runat="server">
      <script src="<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") %>" type="text/javascript"></script>
      <script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js") %>" type="text/javascript"></script>
      <script src="<%= Url.Content("~/Scripts/MicrosoftMvcValidation.debug.js") %>" type="text/javascript"></script>
      <% Html.EnableClientValidation()%>
    </head>
    

Para compilar el código de ejemplo, necesita:

  • Microsoft Visual Studio 2008 Service Pack 1 o Visual Web Developer 2008 Express Edition Service Pack 1.

  • La base de datos de ejemplo AdventureWorksLT_2008. Para obtener información sobre la forma de descargar e instalar la base de datos de ejemplo de SQL Server, vea Microsoft SQL Server Product Samples: Database en el sitio CodePlex. Asegúrese de que instala la versión correcta de la base de datos de ejemplo para la versión de SQL Server que esté ejecutando (Microsoft SQL Server 2005 o Microsoft SQL Server 2008).

  • Una aplicación de MVC que tiene un EDM que fue creado a partir de la base de datos de ejemplo de AdventureWorksLT_2008. Para obtener más información, vea el tutorial Creating Model Classes with the Entity Framework en el sitio web de ASP.NET.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft