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: (转载)掌握JavaScript语言的思想前提

    Thanks for your comment, actually we are planning to own our english blog later.

    --baldwin

  2. Re: (转载)掌握JavaScript语言的思想前提

    This seems exciting but I wish it were in English

    --Joey

  3. Re: 加速DNN的新举措

    SkinPath是类Skin的一个自读属性, 你直接在模块里是没法用的,需要你初始化:)

    --baldwin

  4. Re: 加速DNN的新举措

    为什么我的模块里用SkinPath,找不到SkinPath的定义?

    --xmen

  5. Re: 读书杂感--开源与我

    支持一下楼主。说的很好!

    --qilei

  6. Re: 如何在DNN模块级别以编程方式添加样式文件

    reports 模块主要是用于展示自定义的SQL语句获取的数据, 你可以定义不同的SQL及其相关参数, 至于详细的用法不妨Google一下, 貌似国外有不少关于这一模块的资源:)

    --baldwin

  7. Re: 如何在DNN模块级别以编程方式添加样式文件

    请问楼主 DNN 4.5.3 reports 模块怎么使用啊?

    --DNN菜鸟

  8. Re: 如何在DNN模块级别以编程方式添加样式文件

    恩 谢谢楼主 呵呵

    --DNN菜鸟

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