asp.net mvc-突然之间,CultureInfo.CurrentUICulture在视图中没有反映IE9语言偏好



以前,在我的视图中,我对这段代码没有任何问题,而且它总是正确地反映了IE9:中用户的语言偏好设置

@using (Html.BeginForm("Edit", "Revision", FormMethod.Post, new { id = "RevisionMain" }))
{
    @Html.Hidden("UICultureLanguage", CultureInfo.CurrentUICulture.Name)
...
}

我最近添加了这个代码,以前也为我工作过。然而,从上一次这似乎奏效到崩溃,我的公司唯一做的就是升级到Telerik剑道;我看不出这会如何影响这一点,但问题是上面的代码和下面的代码,不再正确地反映用户在IE9中选择的语言设置…

我的视图中有一个代码块使用CultureInfo.CurrentUICulture.Name,但无论我将IE9语言首选项设置为什么,它似乎总是设置为en-US。注意:此代码嵌入在@section:中

**@section JQueryScripts** {
    <script src="@Url.Content("~/Scripts/jquery-1.7.2.min.js")" type="text/javascript"> </script>
    <script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"> </script>
    <script src="@Url.Content("~/Scripts/jquery.validate.1.9.js")" type="text/javascript"> </script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"> </script>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"> </script>
    @* Language support for numerics that use ',' instead of '.' for decimal separator *@
    <script src="@Url.Content("~/Scripts/jquery.validate.globalized.number-mvc4.js")" type="text/javascript"> </script>
    @* Language support for jQuery datepicker *@
    @{
        var currentUiCultureName = CultureInfo.CurrentUICulture.Name;
        var scriptFile = @Url.Content("~/Scripts/jquery/ui/1.8.1/i18n/jquery.ui.datepicker-" + currentUiCultureName + ".js");
        // var scriptFile = @Url.Content("~/Scripts/jquery/ui/1.8.1/i18n-minified/jquery.ui.datepicker-" + currentUiCultureName + ".min.js");
        // Note: If we have a language other than english (en/en-US), include the appropriate .js file to
        // support the jquery datepicker.  Nothing needed to include for english because A) english is
        // the default language supported by the jquery datepicker and B) there is no physical .js file for
        // english because it is not needed (see A).
        //
        // Attention: If a language is not supported, let the javascript error come up, so we know that the
        // language needs to be supported.
        //
        if (!currentUiCultureName.Equals("en", StringComparison.OrdinalIgnoreCase) &&
            !currentUiCultureName.Equals("en-US", StringComparison.OrdinalIgnoreCase))
        {
            <script type="text/javascript" src="@scriptFile"> </script>
        }
    } 
}

我的web.config当前在全球化中具有以下设置:

<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />

我还在控制器中将CultureInfo.CurrentCulture设置为CultureInfo.CurrentUICulture,这样我的模型就可以正确绑定日期和数值:

protected override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
            // For model binding.
            Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture;
        }

非常重要的是要注意:出于某种原因,如果我在OnAuthorization和jQueryScripts@部分的代码块中都设置了断点,OnAuthorization会被命中3次(我确实有一些ajax调用可能会导致这种情况($(document).ready(…),但必须验证,以前从未注意到这一点)-但Thread.CurrentThread.CurrentUICulture似乎只在最后一次调用时正确反映了用户的语言偏好,而我在查询CultureInfo.CurrentUICulture的jQueryScripts@部分中放置的断点在第一次调用OnAuthorize后会被击中。我知道OnAuthorize并没有设置CurrentUICulture,只是指出用户的语言设置似乎在控制器中得到了识别,但在视图中没有。非常令人困惑。。。有什么想法吗?

答案

你相信吗,在我的情况下,这似乎是一个组策略问题,它禁止IE9语言更改被我本地机器上的web应用程序识别。非常奇怪,尽管我第一次使用AD配置文件以来,它出现了各种问题。

最新更新