Register  |  Login

DNN模块开发应用Ajax之Utility

Posted in [DNN使用及思考], [DNN模块开发], [杂项] By baldwin
在此列举一些在开发Ajax模块中的技巧及其相关Utility方法.
1)  检测并注册Ajax
Utility
 Private Sub RegisterDNNAjax()
        ' Determine if AJAX is installed
        If DotNetNuke.Framework.AJAX.IsInstalled Then
            AJAX.RegisterScriptManager()
            ' Create a reference to the Script Manager
            Dim objScriptManager As ScriptManager = ScriptManager.GetCurrent(Page)
            objScriptManager.Services.Add(New ServiceReference(Me.ModulePath "CommentService.asmx"))
            objScriptManager.Scripts.Add(New ScriptReference(Me.ModulePath "js/dnnsunBlog.js"))
       End If
 End Sub
2) dnn.js的加载问题,作为dnn核心的ClientAPI,大名鼎鼎,我想大家都知道,它主要负责客户端脚本和服务器端的交互通讯,其中包括隐藏变量的注册,服务器控件的客户端事件的激发等等。DNN默认的Webcontrols就是充分利用ClientAPI来实现的,包括dnnMenu, dnnTree等等,页面的拖拽功能也是如此。在此我倒不是详细讨论ClientAPI的功能和用法,只是稍微提一下在开发过程需要注意的一点,那就是dnn.js脚本的加载,该脚本是有条件加载的,也就是说你不能假定你任何时候都可以使用dnn.js文件里定义的方法, 比如最常见的dnn.getVar方法。一般注册用户登录时页面并没有加载dnn.js默认只是加载了dnncore.js,你不妨做个试验,那就是用某一注册用户登录dnn,并察看页面源代码,你会发现是不存在dnn.js脚本文件的。例如, 如果你的容器皮肤文件是使用dnnMenu的话,那么dnnMenu控件会要求dnn.js的加载,当然因为dnnMenu只有在admin/host用户登陆时才呈现,所以dnn.js也只有在这种情况下才会被注册.这就是我刚才提到的问题所在.那么解决方案就是我们只能在开发过程假设必须使用到dnn.js的话,就得手动地注册它。比如在Page_Load事件里添加:
注册dnn.js(也就是注册dnn命名空间)
 'Requires at a bare minimum the dnn namespace, so regardless of wheter the ClientAPI is disabled of not we
 'need to register it.
 ClientAPI.RegisterClientReference(Me.Page, ClientAPI.ClientNamespaceReferences.dnn)
接下来,你就可以畅通无阻的使用dnn.js了,比如你可能最常见可能是注册某个隐藏变量,然后在客户端从脚本获取:
服务器注册变量
ClientAPI.RegisterClientVariable(Me.Page, "Container_ID", cmdAddComment.NamingContainer.ClientID "_", True)
客户端获取变量
var Module_Container;
function initContainerID()
{
    if ( typeof(Module_Container) === 'undefined')   Module_Container = dnn.getVar('Container_ID');
}
比如最近项目我是如此利用这些功能的,在此提供一个例子:
模态显示更新进度信息
Sys.Net.WebRequestManager.add_invokingRequest(onInvoke);
Sys.Net.WebRequestManager.add_completedRequest(onComplete);
 
function onInvoke(sender, args)
{
    initContainerID();
    $find( Module_Container 'mpeProgress').show();
}
 
function onComplete(sender, args)
{
    initContainerID();
    $find( Module_Container 'mpeProgress').hide();
}
 
function pageUnload()
{
    Sys.Net.WebRequestManager.remove_invokingRequest(onInvoke);
    Sys.Net.WebRequestManager.remove_completedRequest(onComplete);
}
Copyright © 2007 dnnsun( sunwangji )
Popular tags: Utility, ClientAPI, Ajax, 模块开发, WebControls
Previous Entry: DNN特性之IMC
Next Entry: 开发DNN模块之Utility

Comments

Was it good for you, too? Join the discussion »

leave a reply

About the author
Baldwin's Status
 Contact Me
Baldwin Sun
Senior Developer for dnn solution & founder of SunBlog module...
网站主页
dnnsun
最新评论
  1. Re: "暴力"解决DNN无法登陆的问题

    你好 有个问题 我改了登录界面后能登录 但是一点注册 就跳到了HOME页 这个怎么解决

    --zl24622

  2. Re: 你的dnn站点慢了么?

    需要你把旁边的checkbox勾选上再执行 :)

    --Baldwin

  3. Re: 你的dnn站点慢了么?

    为什么,我将你的代码copy到host>sql中去执行之后,报错呢,语句是不是有问题哦?

    --claire

  4. Re: 剖析DNN架构-开篇之作

    很好

    --vling83

  5. Re: SunBlog更新:增加3D Tag Clouds插件

    在以上评论已说明, SunBlog已经是一个成熟的商业模块,如果需要授权或下载请邮件联系我们, 感谢你的关注, 我们即将推出一个demo的站点(这周之内).

    --Baldwin

  6. Re: SunBlog更新:增加3D Tag Clouds插件

    这个没地方下载的吗,要怎么才能下载到,谢谢

    --Sun key

  7. Re: SunBlog更新:增加3D Tag Clouds插件

    已经电邮您了,请注意查收

    --sunny0315

  8. Re: 如何添加DNN模块的自定义权限

    你只要设置好该节点即可, 比如:DnnSun.SunBlogNuke.Business.InterfaceController, DnnSun.Modules.SunBlogNuke 其他的请再详细看看本文,我觉得说得蛮清楚的 :)

    --Baldwin

Blog搜索
Rss Feed
feedsky
抓虾
pageflakes
newsgator
哪吒
相册库
更多照片请查看相册库
我们的服务
  • DotNetNuke 咨询
  • Web设计及其模块开发
  • 免费建站
  • 电子商务
  • 开拓市场
我们致力于开发定制的web 2.0 ,所服务的客户主要包括小中型企业,社区俱乐部及其非盈利机构组织。我们将利用开源的DNN作为我们核心的系统机制,更多相关信息...
版权声明
本站任何言论仅代表个人观点,与作者所在的公司没有任何关系,所有贴子皆以“现状”提供且没有任何担保,同时也没有授予任何权利。