2013-02-08 6 views
0

Я могу локализовать большинство аннотаций данных в asp.net mvc. Но для некоторых из них я не могу. Например посмотрите на это:localization asp.net mvc annotation

public class TestModel { 
    [Required(ErrorMessageResourceName="MyFloat",ErrorMessageResourceType=typeof(MyResource))] 
    [Display(Name = "MyFloat", ResourceType = typeof(MyResource))] 
    public float MyFloat { get; set; } 
} 

Как вы можете видеть, я могу локализовать Required и Display атрибуты. Но если конечный пользователь вводит строку в поле, валидатор выдает ошибку с этим сообщением:

Поле MyFloat должно быть числом.

Я искал все атрибуты, чтобы найти атрибут, чтобы изменить это сообщение, но я не мог. У вас есть идеи? Заранее спасибо.

+0

Я нашел некоторую информацию, которая может помочь вам здесь - http://stackoverflow.com/questions/5395040/globally-localize-validation/5395297 # 5395297 – Trax72

+0

Возможное решение здесь: http://stackoverflow.com/questions/12099466/the-field-must-be-a-number-how-can-change-this- message-to-another-lenguage – stralsi

+0

Попробуйте отключить скрипты в браузере и посмотреть, работает ли он так, как ожидалось. Это может быть проверка jQuery, которая переопределяет вашу строку. – OakNinja

ответ

0

Вы можете попробовать с атрибутом Range:

[Range(float.MinValue, float.MaxValue, ErrorMessageResourceName = "IncorrectFloat", ErrorMessageResourceType=typeof(Resources))] 
public float MyFloat { get; set; } 
+0

Это не работает – Nick

0

Это вопрос о последовательности событий. Рамки по сравнению с вашими обычными.

Получающее сообщение по умолчанию встроено в каркас. Это строковый ресурс. Связующее устройство по умолчанию добавляет его при привязке значения строки к двойному типу. Это, очевидно, сделано до вашей пользовательской проверкой и, следовательно, вы получаете это сообщение об ошибке по умолчанию.

Для того чтобы изменить это поведение, вам может понадобиться написать бланк для пользовательской модели. Пример создания настраиваемого связующего для модели - here.

Надеюсь, это поможет.

0

Если это на сторону клиента вы обеспокоены только добавить это либо в конец файла jquery.validate.js или на отдельный файл JavaScript и ссылаться на него сразу после:

jQuery.extend(jQuery.validator.messages, { 
    required: "Este campo es obligatorio.", 
    remote: "Por favor, llenar este campo.", 
    email: "Debe escribir una dirección de correo válida", 
    url: "Debe escribir una dirección válida.", 
    date: "Debe escribit una fecha válida.", 
    dateISO: "Debe escribit una fecha (ISO) válida.", 
    number: "Debe escribir un número válido.", 
    digits: "Por favor, esribir sólo dígitos.", 
    creditcard: "Debe escribir un número de tarjeta válido.", 
    equalTo: "Por favor, escribir el mismo valor nuevamente.", 
    accept: "Por favor, escribir un valor con una extensión aceptada.", 
    maxlength: jQuery.validator.format("Por favor, no escribir más de {0} caracteres."), 
    minlength: jQuery.validator.format("Por favor, no escribir menos de {0} caracteres."), 
    rangelength: jQuery.validator.format("Por favor, escribir un valor entre {0} y {1} caracteres."), 
    range: jQuery.validator.format("Por favor, escribir un valor entre {0} y {1}."), 
    max: jQuery.validator.format("Por favor, escribir un valor menor o igual a {0}."), 
    min: jQuery.validator.format("Por favor, escribir un valor mayor o igual a {0}.") 
}); 

Это должны локализовать свои сообщения.

+0

Примечание: это самый простой способ жесткого кода локализации jquery.validate. Для проектов с несколькими возможными локализациями у меня есть папка со всеми локализованными .js-файлами (validate-es.js, validate-us.js и т. Д.) И решить, какой из них следует отображать из метода BundleConfig и настроенного языкового стандарта в Интернете. конфиг – amhed

1

Я нашел, что это проще просто добавить аннотацию данных:

[RegularExpression(@"^[0-9]+$", ErrorMessageResourceName="MyFloat",ErrorMessageResourceType=typeof(MyResource))] 

Он работает на стороне клиента