asp.net-mvc - net - mvc validation model
MVC 4 ignora DefaultModelBinder.ResourceClassKey (1)
Agregar un archivo de recursos a App_GlobalResources
con una clave PropertyValueRequired
y cambiar DefaultModelBinder.ResourceClassKey
al nombre de archivo no tiene efecto en MVC 4. La cadena The {0} field is required
nunca cambia. No quiero configurar el tipo de clase de recurso y la clave en cada campo requerido. ¿Me estoy perdiendo de algo?
Editar:
Realicé una pequeña modificación en el código de Darin Dimitrov para que las personalizaciones requeridas funcionen:
public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
public MyRequiredAttributeAdapter(
ModelMetadata metadata,
ControllerContext context,
RequiredAttribute attribute
)
: base(metadata, context, attribute)
{
if (attribute.ErrorMessageResourceType == null)
{
attribute.ErrorMessageResourceType = typeof(Messages);
}
if (attribute.ErrorMessageResourceName == null)
{
attribute.ErrorMessageResourceName = "PropertyValueRequired";
}
}
}
Esto no es específico de ASP.NET MVC 4. Fue lo mismo en ASP.NET MVC 3. No puede establecer el mensaje requerido usando DefaultModelBinder.ResourceClassKey
, solo el PropertyValueInvalid
.
Una forma de lograr lo que está buscando es definir un RequiredAttributeAdapter
personalizado:
public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
public MyRequiredAttributeAdapter(
ModelMetadata metadata,
ControllerContext context,
RequiredAttribute attribute
) : base(metadata, context, attribute)
{
attribute.ErrorMessageResourceType = typeof(Messages);
attribute.ErrorMessageResourceName = "PropertyValueRequired";
}
}
que se registrará en Application_Start
:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(RequiredAttribute),
typeof(MyRequiredAttributeAdapter)
);
Ahora, cuando a un campo que no App_GlobalResources
no se le asigna un valor, el mensaje de error vendrá de Messages.PropertyValueRequired
donde Messages.resx
debe definir dentro de App_GlobalResources
.