DNN在Ajax上支持了很多,最著名的动作就是在模块定义上增加了Supports Partial Rendering,可以支持局部刷新。如果勾选了这个标志位,DNN就是把模块内容放在一个UpdatePanel中,这样就可以做到局部刷新。
近日在项目中有一个模块,设置了这个PartialRendering的标志位。兴奋之余,却发现模块中AddModuleMessage不起作用了,无论如何都不能显示错误信息。不断尝试后,发现去掉PartialRendering标志后,错误信息就可以显示了,百思不得其解,难道Ajax中就不能报错了吗?
不甘心啊,于是经过艰苦卓绝的斗争,终于在skin.vb中找到了答案。skin.vb中有一个方法:InjectModule()是加载模块的,一个模块的加载顺序是这样的:
现在的解决方案只能是修改skin.vb中的加载逻辑,将MessagePlaceHolder放到UpdatePanel里面。修改代码如下:
将412行的代码移到下面Ajax的代码块附近,并在Ajax判断时:
'
inject a message placeholder for common module messaging - UI.Skins.Skin.AddModuleMessage
Dim MessagePlaceholder As New PlaceHolder
MessagePlaceholder.ID = "MessagePlaceHolder"
MessagePlaceholder.Visible = True
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
'
module user control processing
If
Not
objPortalModuleBase
Is
Nothing
Then
'
if module is dynamically loaded and AJAX is installed and the control supports partial rendering (defined in ModuleControls table )
If
blnDynamic
=
True
AndAlso
objModule.SupportsPartialRendering
=
True
AndAlso
AJAX.IsInstalled
=
True
Then
'
register AJAX
AJAX.RegisterScriptManager()
'
enable Partial Rendering
AJAX.SetScriptManagerProperty(
Me
.Page,
"
EnablePartialRendering
"
,
New
Object
() {
True
})
'
create update panel
Dim
objUpdatePanel
As
Control
=
AJAX.CreateUpdatePanelControl
objUpdatePanel.ID
=
objPortalModuleBase.ID
&
"
_UP
"
'
get update panel content template
Dim
objContentTemplateContainer
As
Control
=
AJAX.ContentTemplateContainerControl(objUpdatePanel)
'Inject message place holder in update panel
objContentTemplateContainer.Controls.Add(MessagePlaceholder)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
'
inject module into update panel content template
objContentTemplateContainer.Controls.Add(objPortalModuleBase)
'
inject the update panel into the panel
objPanel.Controls.Add(objUpdatePanel)
'
create image for update progress control
Dim
objImage
As
System.Web.UI.WebControls.Image
=
New
System.Web.UI.WebControls.Image()
objImage.ImageUrl
=
"
~/images/progressbar.gif
"
'
hardcoded
'
inject updateprogress into the panel
objPanel.Controls.Add(AJAX.CreateUpdateProgressControl(objUpdatePanel.ID, objImage))
Else
objPanel.Controls.Add(MessagePlaceholder)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
'
inject the module into the panel
objPanel.Controls.Add(objPortalModuleBase)
End
If
End
If
这个方案的问题就是需要修改DotNetNuke.dll,我重新编译了一个Dotnetnuke.dll(版本4.5.5.1),可以从 这儿下载。该版本仅供大家参考和测试,保证没有病毒和后门,但不负法律责任哦。
近日在项目中有一个模块,设置了这个PartialRendering的标志位。兴奋之余,却发现模块中AddModuleMessage不起作用了,无论如何都不能显示错误信息。不断尝试后,发现去掉PartialRendering标志后,错误信息就可以显示了,百思不得其解,难道Ajax中就不能报错了吗?
不甘心啊,于是经过艰苦卓绝的斗争,终于在skin.vb中找到了答案。skin.vb中有一个方法:InjectModule()是加载模块的,一个模块的加载顺序是这样的:
- 加载容器
- ……
- 加载MessagePlaceHolder,放到容器中。这个就是AddModuleMessage()放错误信息的地方
- 加载模块控件;
- 判断是否支持Ajax
- 如果是:生成UpdatePanel,并将模块控件放到UpdatePanel,然后将UpdatePanel放入容器
- 如果不支持,直接将模块控件放到容器中
现在的解决方案只能是修改skin.vb中的加载逻辑,将MessagePlaceHolder放到UpdatePanel里面。修改代码如下:
将412行的代码移到下面Ajax的代码块附近,并在Ajax判断时:
- 如果支持Ajax,先将MessagePlaceHolder放到UpdatePanel,再放模块控件
- 否则,先将MessagePlaceHolder放到容器,再放模块控件
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
这个方案的问题就是需要修改DotNetNuke.dll,我重新编译了一个Dotnetnuke.dll(版本4.5.5.1),可以从 这儿下载。该版本仅供大家参考和测试,保证没有病毒和后门,但不负法律责任哦。