页面管理模块中的 window.dnnLoadScriptsInAjaxMode 未定义
我的开发机器 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。
怎么会这样?
此问题是由在 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”的数据项。这样,客户端检查就会失败。
如果删除此属性,一切都会恢复正常。
您可以尝试调整页面管理页面上正在使用的“皮肤”吗?尝试使用 DNN 的“默认”皮肤之一,看看您的皮肤/主题中是否存在 jquery/javascript 冲突,从而导致您看到的 JS 错误。
如果这样做可以解决问题,我会开始查看您的 JS 文件的“加载顺序”。
您当前运行的是哪个版本的 DNN 平台?