2016-09-07 2 views
1

У меня есть действие Регистрировать в моем приложении Сеть САШ Mvc и имеет атрибут валидации
[CaptchaValidation("Captcha", "captchaValidateId", "errorMessage")]
Локализации в CaptchaValidation

Теперь мне нужна локализация с помощью ресурсов, но этот атрибут принимает только строку как errorMessage пар, так что я сделал мой собственный LocalizedCaptchaValidationAttribute:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] 
public class LocalizedCaptchaValidationAttribute : 
    BotDetect.Web.Mvc.CaptchaValidationAttribute 
{ 
    public LocalizedCaptchaValidationAttribute(string inputfield, string captchaId) 
     : base(inputfield, captchaId, AccountRes.InvalidCapcha) 
    { 
    } 
} 

Но есть проблемы. Конструктор, вызванный только при первом вызове действия Реестра. Таким образом, после сообщения об изменении языка все еще остается неизменным.

Например: Открыть китайская версия страницы ввода неправильно капчу представить, получить

"недействительные Capcha _CH" ошибка. Затем переключитесь на английский, введите неверный capcha, отправьте, получите ошибку «Неверный capcha _ch» вместо «Недействительный capcha _en».

Как это решить?

P.S. Локализация работает через коды языков в MapRoute (пример:/ru/Account/Register) и установка Thread.CurrentThread.CurrentUICulture и Thread.CurrentThread.CurrentCulture.

+0

Локализация по языковым кодам работает на других страницах? (проблема только в captcha?) –

+0

Все отлично сейчас. Проблема в локализации строк, прошедших в атрибутах. – kir

ответ

0

Как вы сказали, «Конструктор, вызванный только при первом вызове вызова реестра», поэтому атрибут не принял локализовать ресурс. Однако вы можете проверить ModelState на ошибку «Captcha» и изменить ее, т.е.

if (!ModelState.IsValid){ 
    if (ModelState["Captcha"] != null) 
    { 
     ModelState["Captcha"].Errors.RemoveAt(0); 
     ModelState.AddModelError("Captcha",Resources.ErrorMessages.CaptchaCodeError); 
    }  
    return View(model); 
}