【发布时间】: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