Проблема с глобализацией ScriptManager

#asp.net #sharepoint #asp.net-ajax #sharepoint-2010 #scriptmanager

#asp.net #sharepoint #asp.net-ajax #sharepoint-2010 #scriptmanager

Вопрос:

У меня проблема с asp: ScriptManager, который некорректно работает в SharePoint. Я установил EnableScriptGlobalization =»true», чтобы иметь возможность использовать объект Sys.CultureInfo для ASP.NET AJAX, но из-за того, что скрипт выводится в неправильном порядке, он не работает. Тот же код корректно работает в обычном 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 страница web site .aspx и установите для языка управления значение sv-SE на стороне сервера, результат будет таким, как ожидалось.

Культура работы на стороне сервера: sv-SE

Культура клиентской части: sv-SE

Но когда я помещаю тот же usercontrol на страницу сайта SharePoint 2010, устанавливаю для языка сайта значение шведский и устанавливаю EnableScriptGlobalization =»true» на главной странице, я все равно получаю результат

Культура работы на стороне сервера: sv-SE

Культура работы на стороне клиента: en-US

Когда я начал копаться в этой проблеме, я заметил, что причина заключалась в том, что скрипт блокирует выводимые ScriptManager данные в неправильном порядке. Когда для параметра EnableScriptGlobalization установлено значение true, ScriptManager выводит блок сценария, который определяет переменную __CultureInfo, которая затем используется для инициализации Sys.CultureInfo. Эта переменная должна быть определена до MicrosoftAjax.js загружено, в противном случае по умолчанию будет использоваться язык en-US.

В ASP.NET сайт, это работает правильно. Сначала определяется переменная __CultureInfo, затем MicrosoftAjax.js загружается из WebResource.axd. Но в SharePoint, MicrosoftAjax.js загружается намного раньше, а переменная __CultureInfo определена слишком поздно.

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

Ответ №1:

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

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

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