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”的数据项。这样客户端检查就失败了。
如果删除该属性,一切都会恢复正常。
我的开发机器 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”的数据项。这样客户端检查就失败了。
如果删除该属性,一切都会恢复正常。