【问题标题】:ScriptManager globalization issueScriptManager 全球化问题
【发布时间】:2011-08-01 16:01:49
【问题描述】:

我遇到了asp:ScriptManager 在SharePoint 下无法正常工作的问题。我已设置 EnableScriptGlobalization="true" 以便能够使用 ASP.NET AJAX 的 Sys.CultureInfo 对象,但由于脚本以错误的顺序输出,因此无法正常工作。相同的代码在普通的 ASP.NET 站点下可以正常工作,因此问题似乎与 SharePoint 有关。尽管它在 SharePoint 2007 下确实可以正常工作。

为了重现该问题,我创建了这个简单的用户控件 CultureControl.ascx。

<%@ Control Language="C#" %>
Server side culture: <%= System.Threading.Thread.CurrentThread.CurrentCulture.Name %><br />
Client side culture: <script type="text/javascript">document.write(Sys.CultureInfo.CurrentCulture.name);</script><br />

当我在常规 ASP.NET 网站 .aspx 页面上包含此控件,并在服务器端将区域性设置为 sv-SE 时,输出符合预期。

服务器端文化:sv-SE

客户端文化:sv-SE

但是,当我将相同的用户控件放在 SharePoint 2010 网站的页面上,将网站区域设置为瑞典语并在母版页中设置 EnableScriptGlobalization="true" 时,我仍然得到输出

服务器端文化:sv-SE

客户端文化:en-US

当我开始研究这个问题时,我注意到原因是 ScriptManager 输出的脚本块的顺序错误。当 EnableScriptGlobalization 设置为 true 时,ScriptManager 会输出一个定义 __cultureInfo 变量的脚本块,然后使用该变量来初始化 Sys.CultureInfo。此变量必须在加载 MicrosoftAjax.js 之前定义,否则将默认为 en-US 文化。

在 ASP.NET 站点中,这可以正常工作。首先定义 __cultureInfo 变量,然后从 WebResource.axd 加载 MicrosoftAjax.js。但在 SharePoint 下,MicrosoftAjax.js 加载得更早,而 __cultureInfo 变量定义得太晚。

有人知道这个问题的解决方案或解决方法吗?

【问题讨论】:

    标签: asp.net sharepoint asp.net-ajax sharepoint-2010 scriptmanager


    【解决方案1】:

    我正在做的一个解决方案,它工作得很好。在页面末尾添加以下内容(母版页)

    <script>
    if (__cultureInfo)
    {
       Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(__cultureInfo);
       delete __cultureInfo;
    }
    </script>
    

    更新:我之前写了一个错误的解决方案,现在上面的已经正确更新了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2014-07-26
      相关资源
      最近更新 更多