1

我正在 mvc4 中开发一个应用程序。我希望该应用程序可以用英语和俄语工作。我的标题是俄语,但错误消息仍然是英语。

我的模型包含:-

 [Required(ErrorMessageResourceType = typeof(ValidationStrings),
              ErrorMessageResourceName = "CountryNameReq")]            
    public string CountryName { get; set; }

if(ModelState.IsValid) 变为 false 它将转到 GetErrorMessage()

public string GetErrorMessage()
    {  
       CultureInfo ci = new CultureInfo(Session["uiCulture"].ToString());

        System.Threading.Thread.CurrentThread.CurrentUICulture = ci;

        System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);          
    string errorMsg = string.Empty;
    int cnt = 1;
    var errorList = (from item in ModelState
                   where item.Value.Errors.Any()
                   select item.Value.Errors[0].ErrorMessage).ToList();                                                 

        foreach (var item in errorList)
        {
            errorMsg += cnt.ToString() + ". " + item + "</br>";
            cnt++;
        }
        return errorMsg;
    }

但我总是收到英文错误消息。如何自定义代码以获取当前文化。

4

1 回答 1

3

原因是你设置文化太晚了。您在控制器操作中设置它,但是模型绑定器添加的验证消息比您的控制器操作开始执行要早得多。在那个阶段,当前的线程文化仍然是默认的。

为此,您应该在执行管道中更早地设置文化。例如,您可以Application_BeginRequest在您的方法中执行此操作Global.asax

就像这样:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    CultureInfo ci = new CultureInfo(Session["uiCulture"].ToString());
    System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
    System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
}
于 2013-02-27T15:07:06.417 回答