开发者问题收集

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

2016-10-07
427

我的开发机器 dotnetnuke 安装出现问题。当我尝试加载“管理/页面管理”下的页面管理模块的内容时,出现 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。

怎么会这样?

2个回答

此问题是由在 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”的数据项。这样,客户端检查就会失败。

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

spankmaster79
2016-11-02

您可以尝试调整页面管理页面上正在使用的“皮肤”吗?尝试使用 DNN 的“默认”皮肤之一,看看您的皮肤/主题中是否存在 jquery/javascript 冲突,从而导致您看到的 JS 错误。

如果这样做可以解决问题,我会开始查看您的 JS 文件的“加载顺序”。

您当前运行的是哪个版本的 DNN 平台?

Chris Hammond
2016-10-18