window.dnnLoadScriptsInAjaxMode не определен в модуле администрирования страницы

#asp.net #dotnetnuke #client-dependency

#asp.net #dotnetnuke #зависимость от клиента

Вопрос:

У меня проблема с установкой dotnetnuke на моей машине разработки. Когда я пытаюсь загрузить содержимое модуля администрирования страницы в разделе «Администратор / управление страницей», я получаю сообщение об ошибке JavaScript

страницы: 2089 Неперехваченная ошибка типа: не удается прочитать свойство ‘length’ неопределенного

Это связано с тем, что window.dnnLoadScriptsInAjaxMode не определен

 var loadScriptInMultipleMode = function(){
    for(var i = 0; i < window.dnnLoadScriptsInAjaxMode.length; i  ){
  

Когда я просматриваю код страницы, я вижу и отлаживаю следующее, если проверка не удалась: «item.indexOf(‘$ crm_’)» не работает.

 (function($){
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(function (sender, args){
var dataItems = args.get_dataItems();
for(var item in dataItems){
    if(item.indexOf('$crm_') > -1){
        var content = dataItems[item];
        ...
  

Поскольку DataItems содержит все значения для заполнителей ClientDependency с подчеркиванием «_» в качестве префикса. например, «_crm_BodySCRIPTS» вместо знака доллара «$» «$crm_BodySCRIPTS», чего и ожидает код.

В нашем производственном экземпляре все работает нормально, и я не могу вспомнить, чтобы менялась какая-либо конфигурация префикса для платформы ClientDependency. Объединение и сокращение файлов отключено, как при администрировании.

Кто-нибудь может помочь с тем, что здесь может быть не так?

ОБНОВЛЕНИЕ: я вижу в строке Github: 172 https://github.com/dnnsoftware/Dnn.Platform/blob/development/DNN Platform/DotNetNuke.Web.Client/Providers/DnnBodyRenderProvider.cs что это жестко запрограммировано. Так что я, должно быть, каким-то образом уже установил ScriptManager, не зная.

Как это может быть?

Ответ №1:

Проблема вызвана установкой атрибута ClientIDMode в web.config для страниц.

 <pages validateRequest="false" enableViewStateMac="true" enableEventValidation="true" viewStateEncryptionMode="Never"  clientIDMode="AutoID">
  

Как указано в описании от Microsoft:

Значение ClientID генерируется путем объединения значений идентификаторов каждого родительского контейнера именования со значением идентификатора элемента управления. В сценариях привязки данных, в которых отображаются несколько экземпляров элемента управления, перед значением ID элемента управления вставляется увеличивающееся значение. Каждый сегмент разделяется символом подчеркивания (_). Этот алгоритм является единственным, который был доступен в версиях ASP.NET раньше , чем ASP.NET 4.

Атрибут вызывает изменение $ на подчеркивание для свойства ClientID, которое затем используется для отображения элементов данных с идентификатором «_crm». Таким образом, проверка на стороне клиента завершается неудачей.

Если вы удалите атрибут, все снова заработает.

Ответ №2:

Можете ли вы попробовать настроить «скин», который используется на странице управления страницей? Попробуйте использовать один из скинов «по умолчанию» с DNN, посмотрите, возможно, существует конфликт jquery / javascript с чем-то в вашем скине / теме, который вызывает ошибку JS, которую вы видите.

Если это поможет решить проблему, я бы начал просматривать ваш «порядок загрузки» файлов JS.

На какой версии платформы DNN вы сейчас работаете?

Комментарии:

1. Я попробую это и сообщу о своих результатах. Версия Evoq Content 8.5. Мы используем наш собственный скин и удалили скин по умолчанию. Но я могу восстановить это и попробовать.

2. Только что проверено, нет темы страницы и нет набора контейнеров страниц. Он по-прежнему работает в нашей тестовой среде, но не на компьютере разработчика

3. Возможно, тема страницы не задана, но использует ли она тему «сайт»?

4. Как я могу это увидеть? Тема сайта настроена на нашу собственную тему. Он работает на одной машине, не работает на другой. Немного странно

5. Я протестировал множество тем, и проблема все еще возникает