Проблема глобализации ScriptManager - PullRequest
2 голосов
/ 08 апреля 2011

У меня проблема с asp: ScriptManager не работает правильно под SharePoint.Я установил EnableScriptGlobalization = "true", чтобы иметь возможность использовать объект Sys.CultureInfo в ASP.NET AJAX, но из-за того, что скрипт выводится в неправильном порядке, он не работает.Тот же код работает правильно на простом сайте ASP.NET, поэтому проблема, похоже, связана с SharePoint.Хотя в SharePoint 2007 все работало правильно.

Чтобы воспроизвести проблему, я создал этот простой usercontrol 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.NETsite .aspx page, и установите язык 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 определена слишком поздно.

Кто-нибудь знает решение или обходной путь для этой проблемы?

1 Ответ

0 голосов
/ 25 апреля 2011

Одно решение, которое я делаю, и оно работает отлично. Добавьте следующее в конце своей страницы (главная страница)

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

ОБНОВЛЕНИЕ: раньше я писал неправильное решение, теперь вышеприведенное правильно обновлено.

...