2

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

页:2089 未捕获的类型错误:无法读取未定义的属性“长度”

这是因为 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 Framework 的任何前缀配置。像在管理中一样关闭合并和缩小文件。

有人可以帮忙解决这里可能出现的问题吗?

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

怎么会这样?

4

2 回答 2

3

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

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

正如微软的描述所说:

ClientID 值是通过将每个父命名容器的 ID 值与控件的 ID 值连接起来生成的。在呈现控件的多个实例的数据绑定方案中,将在控件的 ID 值前面插入一个递增值。每个段由下划线字符 (_) 分隔。此算法是 ASP.NET 4 之前的 ASP.NET 版本中唯一可用的算法。

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

如果您删除该属性,一切都会再次起作用。

于 2016-11-02T15:54:20.190 回答
0

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

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

您目前在哪个版本的 DNN 平台上运行?

于 2016-10-18T14:01:32.700 回答