window.dnnLoadScriptsInAjaxMode 未在页面管理模块中定义

window.dnnLoadScriptsInAjaxMode undefined in page administration module

我的开发机器 dotnetnuke 安装有问题。当我尝试在 "Admin / Page Management" 下加载页面管理模块的内容时,出现 JavaScript 错误

pages:2089 Uncaught TypeError: Cannot read property 'length' of undefined

这是因为 window.dnnLoadScriptsInAjaxMode 未定义

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

当我查看页面代码时,我可以看到并调试以下 if 检查失败:"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 Framework 的任何前缀配置。在管理中关闭合并和缩小文件。

任何人都可以帮助解决这里可能出现的问题吗?

更新: 我可以在 Github Line:172 https://github.com/dnnsoftware/Dnn.Platform/blob/development/DNN%20Platform/DotNetNuke.Web.Client/Providers/DnnBodyRenderProvider.cs 中看到这是硬编码的。所以我一定是在不知不觉中设置了 ScriptManager。

怎么会这样?

您可以尝试调整页面管理页面上正在使用的 "Skin" 吗?尝试将 "default" 皮肤之一与 DNN 一起使用,看看是否有 jquery/javascript 与您的 skin/theme 中的某些内容发生冲突,从而导致您看到的 JS 错误。

如果这恰好解决了问题,我将开始查看您的 "load order" 个 JS 文件。

您目前 运行 使用哪个版本的 DNN 平台?

问题是由于在 web.config 页面中设置 clientIDMode 属性引起的。

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

正如 Microsoft 中的描述所述:

The ClientID value is generated by concatenating the ID values of each parent naming container with the ID value of the control. In data-binding scenarios where multiple instances of a control are rendered, an incrementing value is inserted in front of the control's ID value. Each segment is separated by an underscore character (_). This algorithm is the only one that was available in versions of ASP.NET earlier than ASP.NET 4.

该属性导致 ClientID 属性 的 $ 更改为下划线,然后用于呈现 ID 为“_crm”的数据项。这样客户端检查就失败了。

如果删除该属性,一切都会恢复正常。