visual validar studio net mvc mac formulario for code asp asp.net-mvc localization data-annotations

validar - ¿Proporcionar mensajes de error localizados para la validación de modelos sin atribución en ASP.Net MVC 2?



search mvc (3)

Estoy usando los atributos de DataAnnotations junto con ASP.Net MVC 2 para proporcionar la validación del modelo para mis ViewModels:

public class ExamplePersonViewModel { [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))] [StringLength(128, ErrorMessageResourceName = "StringLength", ErrorMessageResourceType = typeof(Resources.Validation))] [DataType(DataType.Text)] public string Name { get; set; } [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))] [DataType(DataType.Text)] public int Age { get; set; } }

Esto parece funcionar como se esperaba (aunque es muy detallado). El problema que tengo es que se están realizando validaciones de modelos detrás de escena que no están vinculadas a ningún atributo específico. Un ejemplo de esto en el modelo anterior es que la propiedad Age debe ser un int . Si intenta ingresar un valor no entero en el formulario, se producirá un error con el siguiente mensaje (no localizado):

El campo Edad debe ser un número.

¿Cómo se pueden localizar estos mensajes de validación sin atributos?

¿Hay una lista completa de estos mensajes disponibles para que pueda asegurarme de que estén localizados?


Lista de mensajes (MVC 3.0):

ActionMethodSelector_AmbiguousMatch ActionMethodSelector_AmbiguousMatchType AsyncActionMethodSelector_AmbiguousMethodMatch AsyncActionMethodSelector_CouldNotFindMethod AsyncCommon_AsyncResultAlreadyConsumed AsyncCommon_ControllerMustImplementIAsyncManagerContainer AsyncCommon_InvalidAsyncResult AsyncCommon_InvalidTimeout AuthorizeAttribute_CannotUseWithinChildActionCache ChildActionOnlyAttribute_MustBeInChildRequest ClientDataTypeModelValidatorProvider_FieldMustBeNumeric Common_NoRouteMatched Common_NullOrEmpty Common_PartialViewNotFound Common_PropertyCannotBeNullOrEmpty Common_PropertyNotFound Common_TriState_False Common_TriState_NotSet Common_TriState_True Common_TypeMustDriveFromType Common_ValueNotValidForProperty Common_ViewNotFound CompareAttribute_MustMatch CompareAttribute_UnknownProperty Controller_UnknownAction Controller_UpdateModel_UpdateUnsuccessful Controller_Validate_ValidationFailed ControllerBase_CannotExecuteWithNullHttpContext ControllerBase_CannotHandleMultipleRequests ControllerBuilder_ErrorCreatingControllerFactory ControllerBuilder_FactoryReturnedNull ControllerBuilder_MissingIControllerFactory CshtmlView_ViewCouldNotBeCreated CshtmlView_WrongViewBase DataAnnotationsModelMetadataProvider_UnknownProperty DataAnnotationsModelMetadataProvider_UnreadableProperty DataAnnotationsModelValidatorProvider_ConstructorRequirements DataAnnotationsModelValidatorProvider_ValidatableConstructorRequirements DefaultControllerFactory_ControllerNameAmbiguous_WithoutRouteUrl DefaultControllerFactory_ControllerNameAmbiguous_WithRouteUrl DefaultControllerFactory_ErrorCreatingController DefaultControllerFactory_NoControllerFound DefaultControllerFactory_TypeDoesNotSubclassControllerBase DefaultModelBinder_ValueInvalid DefaultModelBinder_ValueRequired DefaultViewLocationCache_NegativeTimeSpan DependencyResolver_DoesNotImplementICommonServiceLocator ExceptionViewAttribute_NonExceptionType ExpressionHelper_InvalidIndexerExpression FilterAttribute_OrderOutOfRange HtmlHelper_InvalidHttpMethod HtmlHelper_InvalidHttpVerb HtmlHelper_MissingSelectData HtmlHelper_TextAreaParameterOutOfRange HtmlHelper_ValidationParameterCannotBeEmpty HtmlHelper_ValidationParameterMustBeLegal HtmlHelper_ValidationTypeCannotBeEmpty HtmlHelper_ValidationTypeMustBeLegal HtmlHelper_ValidationTypeMustBeUnique HtmlHelper_WrongSelectDataType JsonRequest_NotAllowed ModelBinderAttribute_ErrorCreatingModelBinder ModelBinderAttribute_TypeNotIModelBinder ModelBinderDictionary_MultipleAttributes ModelMetadata_PropertyNotSettable MvcRazorCodeParser_CannotHaveModelAndInheritsKeyword MvcRazorCodeParser_ModelKeywordMustBeFollowedByTypeName MvcRazorCodeParser_OnlyOneModelStatementIsAllowed OutputCacheAttribute_CannotNestChildCache OutputCacheAttribute_ChildAction_UnsupportedSetting OutputCacheAttribute_InvalidDuration OutputCacheAttribute_InvalidVaryByParam PrivateAssociatedMetadataTypeTypeDescriptor_MetadataTypeContainsUnknownProperties RedirectAction_CannotRedirectInChildAction ReflectedActionDescriptor_CannotCallInstanceMethodOnNonControllerType ReflectedActionDescriptor_CannotCallMethodsWithOutOrRefParameters ReflectedActionDescriptor_CannotCallOpenGenericMethods ReflectedActionDescriptor_CannotCallStaticMethod ReflectedActionDescriptor_ParameterCannotBeNull ReflectedActionDescriptor_ParameterNotInDictionary ReflectedActionDescriptor_ParameterValueHasWrongType ReflectedAsyncActionDescriptor_CannotExecuteSynchronously ReflectedParameterBindingInfo_MultipleConverterAttributes RemoteAttribute_NoUrlFound RemoteAttribute_RemoteValidationFailed RequireHttpsAttribute_MustUseSsl SessionStateTempDataProvider_SessionStateDisabled SingleServiceResolver_CannotRegisterTwoInstances SynchronizationContextUtil_ExceptionThrown TemplateHelpers_NoTemplate TemplateHelpers_TemplateLimitations Templates_TypeMustImplementIEnumerable TypeCache_DoNotModify ValidatableObjectAdapter_IncompatibleType ValueProviderResult_ConversionThrew ValueProviderResult_NoConverterExists ViewDataDictionary_ModelCannotBeNull ViewDataDictionary_WrongTModelType ViewMasterPage_RequiresViewPage ViewPageHttpHandlerWrapper_ExceptionOccurred ViewStartPage_RequiresMvcRazorView ViewUserControl_RequiresViewDataProvider ViewUserControl_RequiresViewPage WebFormViewEngine_UserControlCannotHaveMaster WebFormViewEngine_ViewCouldNotBeCreated WebFormViewEngine_WrongViewBase


Una forma sencilla de especificar un mensaje de mensaje de error de localización como Entero, Doble, Flotante puede hacerlo de la siguiente manera.

[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))] [Range(0, int.MaxValue, ErrorMessageResourceName = "ValidateAge", ErrorMessageResourceType = typeof(Resources.Validation))] [DataType(DataType.Text)] public string Age { get; set; }

Entonces, en lugar de usar la cadena de uso Integer, double y Float con el atributo Range, especifique su mensaje de error de localización personalizado.


Vaya a http://forums.asp.net/p/1512140/3608427.aspx , vea el mensaje de Bradwils con fecha 01-09-2010, 6:20 PM.

La solución funciona bien para mí.

Debería ser interesante conocer la lista completa de los mensajes reemplazables ...

ACTUALIZAR

Aquí los contenidos del post:

Cree una clase de recurso global en App_GlobalResources y configure DefaultModelBinder.ResourceClassKey con el nombre de esta clase (por ejemplo, si creó "Messages.resx", luego configure ResourceClassKey como "Messages").

Hay dos cadenas que puedes anular en MVC 2:

  • El valor de cadena para "PropertyValueInvalid" se usa cuando los datos que el usuario ingresó no son compatibles con el tipo de datos (por ejemplo, escribir "abc" para un campo entero). El mensaje predeterminado para esto es: "El valor ''{0}'' no es válido para {1}".
  • El valor de cadena para "PropertyValueRequired" se usa cuando el usuario no ingresó ningún dato para un campo que no es anulable (por ejemplo, un campo entero). El mensaje predeterminado para esto es: "Se requiere un valor".

Es importante tener en cuenta en el segundo caso que, si tiene el DataAnnotationsModelValidatorProvider en su lista de proveedores de validador (que es de forma predeterminada), nunca verá este segundo mensaje. Este proveedor ve campos no opcionales y les agrega un atributo [Requerido] implícito para que sus mensajes sean consistentes con otros campos con atributos [Requeridos] explícitos y para garantizar que obtenga la validación del lado del cliente para los campos requeridos.