2010-02-13 20 views
8

Estoy creando una aplicación asp.net mvc 2 que genera mi modelo de vista dinámicamente según la entrada del usuario. En pocas palabras, el usuario puede elegir qué campos desea ver en su Vista.ASP.NET MVC 2 Anotaciones de datos en un modelo generado dinámicamente

Dado que los helpers basados ​​en plantillas dependen en gran medida de las propiedades y los atributos del modelo (anotaciones de datos), necesitaría de alguna manera agregar los atributos al modelo de vista durante el tiempo de ejecución. No es necesario decir que esta no es una tarea simple.

Entonces, ¿qué me recomiendan que haga en este escenario? No puedo agregar los atributos de forma estática, así que ¿debo continuar y tratar de agregarlos dinámicamente incluso si es mucho trabajo o debo tratar de usar un enfoque diferente?

¡Gracias de antemano!

Felipe

Respuesta

3

Un encuadernador de modelo personalizado solo le ayudaría en la parte de encuadernación. No ayudará con los ayudantes con plantilla u otras características de ASP.NET MVC.

Recomiendo escribir un proveedor personalizado de metadatos no por la herencia de ModelMetadataProvider y el registro de su proveedor de global.asax utilizando ModelMetadataProviders. Un proveedor de metadatos personalizado puede obtener sus metadatos desde cualquier lugar que desee: atributos CLR, archivos XML, bases de datos o un generador de números aleatorios. El proveedor de anotaciones de datos incorporado, por supuesto, usa atributos CLR.

Es posible que desee echar un vistazo al código fuente del proveedor de metadatos de anotaciones de datos incorporado para ver un ejemplo de cómo implementar un proveedor. Puede descargar el código fuente ASP.NET MVC 2 RC 2 de the CodePlex site. También podría haber una implementación en el proyecto MVC Futures, pero no estoy seguro.

+0

Muchas gracias, hombre! –

0

Suena como una exageración (si he entendido bien) - que es la creación de modelos sobre la marcha. No está utilizando el beneficio principal de tener modelos; compilar verificaciones de tiempo.

Intentaré utilizar objetos específicos para la tarea (por ejemplo, una clase UserForm que tendría la lista de clases UserFormFields, etc.) en la mano y no crearlos sobre la marcha.

Editar: Lo que estoy sugiriendo es que no uso basado en la validación de atributos y el diseño de su modelo con la validación en mente. Un diseño como a continuación podría explicar mejor mi punto:

interface IUserValidation 
{ 
    bool IsValid(); 
} 

class RequiredUserValidation : IUserValidation 
{ 
    public bool IsValid() 
    { 
     // .... 
    } 
} 

class UserFormField 
{ 
    List<IUserValidation> _validations; 

    public IEnumerable<ValidationResult> Validate() 
    { 
     // ... 
    } 
} 
+0

Así es como se ve mi modelo. Una colección de campos que contienen datos. El problema es que no tengo información sobre estos campos en tiempo de compilación. Necesito consultar la base de datos y obtener información de los campos y llenar sus atributos –

0

parece que se necesitaría una vista personalizada modelo de ligante que se aplica la validación de forma dinámica.

Cuestiones relacionadas