国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

DNN模塊開發之利器篇:七種武器

2019-11-17 01:31:18
字體:
來源:轉載
供稿:網友

DNN模塊開發之利器篇:七種武器

2014-04-30 09:08 by DNNTools, ... 閱讀, ... 評論, 收藏, 編輯 我們在進行DNN模塊開發時經常需要調用Dotnetnuke.dll中的方法函數,模塊開發用到DNN的方法函數會讓你的開發更加得心應手,下面我們就來介紹一下。1) PortalModuleBase所屬命名空間:DotNetNuke.Entities.Modules這是一個開發DNN模塊所必須繼承的基類,標志性的基類,在此基類中,你可以得到DNN所為你封裝的一些模塊基本信息,毋需你多費周折,其中包括當前用戶UseID,UserInfo,TabID,ModulePath,ModuleConfiguration,LocalResourceFile等等,下邊就簡單解析幾個比較有用的屬性: <1> ModulePath: 模塊根目錄,可以獲取到模塊根目錄所需要的文件,比如腳本文件,圖像文件,比如你想在后臺注冊一個js腳本,代碼可以類似:
  1. ScriptManagerscriptManager=ScriptManager.GetCurrent(Page);
  2. scriptManager.Services.Add(newServiceReference(this.ModulePath+"WebService.asmx"));
  3. scriptManager.Scripts.Add(newScriptReference(this.ModulePath+"js/Utility.js"));
<2> LocalResourceFile: 本地化資源文件,默認是關聯到模塊根目錄下的App_LocalResources下對應文件,比如你開發的模塊用戶控件為xx_view.ascx,那LocalResourceFile就是App_LocalResources/xx_view.ascx.resx(或xx_view.ascx.zh-CN.resx),如果你想手動的注冊本地化支持,代碼可以類似: lblMessage.Text = Localization.GetString("Message", LocalResourceFile)更高級的應用可能就是設置共享本地化資源,也就是說你可以好些UserControl共享一個資源文件,比如你可以設置一個共享資源文件SharedResources.resx(或SharedResources.zh-CN.resx),專門放置一些公共的本地化鍵值對設置,然后添加如下方法到你的基類或后臺代碼,這是一個值得推薦的方法,節省了資源文件的大小(如果說你開發的模塊比較復雜的話,文件的統籌規劃是必不可少的):
  1. PublicFunctionLocalizationByKey(ByValkeyAsString,OptionalByValIsSharedResourceAsBoolean=False)
  2. IfIsSharedResourceThen
  3. ReturnLocalization.GetString(key,SharedResourceFile)
  4. EndIf
  5. ReturnLocalization.GetString(key,LocalResourceFile)
  6. EndFunction
<3> ModuleConfiguration: 當前用戶控件所在的模塊配置信息,比如動態設置模塊標題,是否顯示模塊容器,是否支持打印或聚合等等.比如通過以下代碼你就可以動態的修改模塊標題:
  1. IfNotNull.IsNull(UserId)Then
  2. ModuleConfiguration.ModuleTitle=Localization.GetString("UpdateUserInfo",LocalResourceFile)
  3. Else
  4. ModuleConfiguration.ModuleTitle=Localization.GetString("ModuleTitle",LocalResourceFile)
  5. EndIf
2) Ajax所屬命名空間:DotNetNuke.FrameworkDNN核心封裝支持Ajax功能的輔助類,其中包含了一些及其有用的方法,比如:IsInstalled(): MS Ajax是否安裝IsEnabled(): MS Ajax是否激活RegisterPostBackControl:注冊傳統PostBack控件RegisterScriptManager: 注冊ScriptManager等等.現舉一個應用例子:
  1. ///<summary>
  2. ///RegisterthebackgroundWebserviceandjs-script.
  3. ///</summary>
  4. PRivatevoidRegisterAjaxWebservice()
  5. {
  6. if(DotNetNuke.Framework.AJAX.IsInstalled())
  7. {
  8. DotNetNuke.Framework.AJAX.RegisterScriptManager();
  9. ScriptManagerscriptManager=ScriptManager.GetCurrent(Page);
  10. scriptManager.Services.Add(newServiceReference(this.ModulePath+"ManageService.asmx"));
  11. scriptManager.Scripts.Add(newScriptReference(this.ModulePath+"Utility.js"));
  12. }
  13. }
3) ModuleSettingsBase所屬命名空間:DotNetNuke.Entities.Modules這是DNN模塊設置的基類,其中主要包含兩個方法,LoadSettings和UpdateSettings,當你繼承于它時,你所需要就是重寫這兩個基類方法,方法體實現業務邏輯,關聯的數據庫表為TabModuleSettings或ModuleSettings,這兩個都具有同樣的數據結構,存儲就是類似哈希表的鍵值對,所不同只是他們更新數據的方法不一樣而已:
  1. DimobjModulesAsNewDotNetNuke.Entities.Modules.ModuleController
  2. objModules.UpdateModuleSetting(ModuleId,"timeinterval",txtTimeInterval.Text.Trim.ToString())
  3. DimobjModulesAsNewDotNetNuke.Entities.Modules.ModuleController
  4. objModules.UpdateTabModuleSetting(ModuleId,"timeinterval",txtTimeInterval.Text.Trim.ToString())
而當你仔細參看代碼,在方法中LoadSettings所使用的Settings實質就是TabModuleSettings和ModuleSettings的合并,當然你也可以自行獲取TabModuleSettings或ModuleSettings,dnn給與你更多的控制權:
  1. PublicShadowsReadOnlyPropertySettings()AsHashtable
  2. Get
  3. If_settingsIsNothingThen
  4. 'MergetheTabModuleSettingsandModuleSettings
  5. _settings=Portals.PortalSettings.GetTabModuleSettings(NewHashtable(ModuleSettings),NewHashtable(TabModuleSettings))
  6. EndIf
  7. Return_settings
  8. EndGet
  9. EndProperty
更多信息你可以參看dnn核心模塊,比如Survey,Link等等.我的網站上也有很多DNN模塊展示:http://www.dnntools.net/4) CDefault( or PageBase)所屬命名空間:DotNetNuke.FrameworkPageBase是DNN核心頁面基類,而CDefault是對此有所封裝的類,兩者何時需要主要看你的開發需要,在此我就分別舉兩個例子: <1>一般模塊中的aspx需要繼承PageBase,PageBase主要有LocalResourceFile,PortalSettings等屬性,比如你模塊中存在一個Print.aspx,后臺代碼可以如此聲明:
  1. PartialPublicClassPrint
  2. InheritsPageBase
  3. EndClass
<2>模塊里的用戶控件如果需要控制頁面信息時,可以新增一個屬性BasePage,代碼如下:
  1. PublicReadOnlyPropertyBasePage()AsDotNetNuke.Framework.CDefault
  2. Get
  3. ReturnCType(Me.Page,DotNetNuke.Framework.CDefault)
  4. EndGet
  5. EndProperty
這時你就可以在用戶控件加載時動態修改頁面相關屬性,比如Title: Me.BasePage.Title = Me.BasePage.Title & " - " & m_oEntry.Title本站點博客模塊就是如此動態設置頁面標題的.或你可以直接如此設置:
  1. 'Overridethepagetitle
  2. DimmyPageAsDotNetNuke.Framework.CDefault
  3. myPage=CType(Me.Page,CDefault)
  4. myPage.Title=Localization.GetString("ControlTitle_YourPage",Me.LocalResourceFile)
5) Globals所屬命名空間:DotNetNuke.Common這是DNN模塊開發用得最多的一個靜態類,匯聚了DNN核心最基本的靜態方法,如果你有心想開發好模塊,好好看看這里邊的方法,你會有意想不到的收獲.比如:<1>ConvertDataReaderToDataTable:把DataReader轉化為DataTable<2>ConvertDataReaderToDataSet:把DataReader轉化為DataSet<3>NavigateURL:最經典的DNN導航(跳轉)函數<4> SendMail:DNN核心發送郵件方法<5>FriendlyUrl:友好URL重寫方法<6>GetFileList:獲取DNN站點根目錄下文件列表,如果你在用UrlControl你會覺得這個方法是你所必須知道的.等等.6) CBO ( and Null )所屬命名空間:DotNetNuke.Common.Utilities這是DNN模塊數據層所必備的一個工具類,對此我也曾專題般的討論過,合理的使用CBO決定你即將開發的模塊的命運,比如擴展性,兼容性,維護代價等等.7) DNNClientAPI所屬命名空間:DotNetNuke.UI.Utilities這是DNN赫赫有名的一個輔助類,為DNN模塊開發客戶端腳本和服務器交互起到不可或缺的作用,同時支持本地化使得腳本也真正實現了本地化.最經常使用例如我們需要在點擊某一個刪除按鈕彈出提示信息,如今在DNN模塊及其簡單,就是一句代碼即可:ClientAPI.AddButtonConfirm(cmdAddComment, LocalizationByKey("cmdDeleteCommentMessage"))在此再舉一個比較經典的應用范例,有時我們需要在客戶獲取目標控件并對此操作,可由于asp.net(DNN)在生成頁面時已自動生成客戶端代碼,比如某一TextBox控件screenName最終可能會生成類似dnn_ctr431_QuickLogin_screenName,如果你在客戶端腳本中直用document.getElementById('cmdHome')獲取該控件的話,只會返回一個undefined或null,這時就需要我們在客戶端注冊一個頁面ID前綴,而DNN早為我們想到了,那就是dnn.js腳本為我們提供兩個方法dnn.gerVar和dnn.setVar,具體流程就是首先在頁面注冊頁面前綴:
  1. ClientAPI.RegisterClientReference(this.Page,ClientAPI.ClientNamespaceReferences.dnn);
  2. ClientAPI.RegisterClientVariable(this.Page,"Container_ID",this.ClientID+"_",true);
然后在腳本中你可以直接得到你想要的控件對象:<DIV class="dp-highlighter" id=javascript.
  1. var_ModuleContainer;
  2. if(typeof(_ModuleContainer)=='undefined')_ModuleContainer=dnn.getVar('Container_ID');
  3. varscreenName=$get(_ModuleContainer+'screenName').value;

如果你還不明白,你可以看我的網站,DNN搭建


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安顺市| 渝中区| 阜康市| 寿宁县| 齐齐哈尔市| 平潭县| 焉耆| 河北省| 开江县| 平陆县| 曲阜市| 合山市| 嘉祥县| 印江| 延吉市| 高邑县| 洪湖市| 建昌县| 梁平县| 平阳县| 思南县| 商洛市| 绥中县| 五大连池市| 虹口区| 汉源县| 玉树县| 泊头市| 特克斯县| 招远市| 张家口市| 曲麻莱县| 武平县| 白河县| 黄山市| 江孜县| 宕昌县| 嘉兴市| 怀集县| 莱芜市| 离岛区|