validaciones mvc framework dataannotations data custom con annotation asp.net-mvc asp.net-mvc-2 data-annotations

asp.net-mvc - mvc - dataannotations validation c#



ASP.NET MVC ModelMetaData: ¿Hay alguna manera de configurar IsRequired en RequiredAttribute? (1)

Debe crear su propio ModelMetadataProvider. Aquí hay un ejemplo usando el DataAnnotationsModelBinder

public class MyMetadataProvider : DataAnnotationsModelMetadataProvider { protected override ModelMetadata CreateMetadata(Collections.Generic.IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName) { var _default = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); _default.IsRequired = attributes.Where(x => x is RequiredAttribute).Count() > 0; return _default; } }

Luego, en su AppStartup en Global.asax, deseará incluir lo siguiente para conectar MyMetadataProvider como proveedor de metadatos predeterminado:

ModelMetadataProviders.Current = new MyMetadataProvider();

Brad Wilson publicó una gran serie de blogs sobre el nuevo ModelMetaData de ASP.NET MVC: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

En él, describe cómo la clase ModelMetaData ahora está expuesta en las vistas y los ayudantes con plantillas. Lo que me gustaría hacer es mostrar un asterisco junto a una etiqueta de campo de formulario si el campo es obligatorio, así que pensé en usar la propiedad IsRequired de ModelMetaData. Sin embargo, IsRequired por defecto es verdadero para todas las propiedades que no admiten nulos, mientras que es falso para todas las propiedades que aceptan nulos. El problema es que las cadenas siempre son anulables, por lo que la propiedad IsRequired siempre es falsa para las cadenas. ¿Alguien sabe cómo anular el valor predeterminado de cómo se establece IsRequired? Alternativamente, pensé en aprovechar el atributo RequiredAttribute con el que he estado decorando mis propiedades, pero RequiredAttribute no parece estar expuesto a través de la clase ModelMetaData. ¿Alguien sabe cómo evitar este problema?

Gracias por adelantado.