Register  |  Login

剖析DNN分页控件

Posted in [DNN模块开发], [杂项] By Baldwin
不知道大家是否用过DNN核心自带的分页控件,我想如果用过的话,也许你已碰到类似我将要提到的问题,那就是该分页控件并非像我们所想的那样,利用经典的asp.net框架中的viewstate来响应(postback)用户的操作,它其实是利用一种更为简单的方式: 用url来维护页面参数,这就使得一旦页面回发(postback), 当前页面就会回滚到原始状态,对应的页面参数也会变成初始值,这对于我们来说无疑是痛苦的。也许你不是很清楚这种状况,不妨举个例子看看, 比如你当前页面的url为:http://localhost/dnndev/tabid/65/category/23/default.aspx, 你注意到url里边存在两个参数(tabid和category), 这时如果你在使用DNN核心自带的分页控件,那对应分页控件的页码也许是类似的链接http://localhost/dnndev/tabid/65/currentpage/4/default.aspx, 当你点击该页码时将会跳转到http://localhost/dnndev/tabid/65/currentpage/4/default.aspx,如此一来category/23这参数也随之丢失了。这样的情况在你是纯粹靠拼字符串来激发页面变化的时候更为明显。所以整个页面的URL里边参数都需要考虑如何维护,防止误操作。深入挖掘该分页控件的代码,你会发现参数维护主要是靠QuerystringParams这一属性来维护,一般维护代码如下:
 
  1.  If Not Request.Params("categoryid"Is Nothing Then  
  2.      m_sViewType = "category"  
  3.      m_oCateggory = CategoryController.GetCategory(CType(Request.Params("categoryid"), Integer))   
  4.   
  5.      _Querystring += "categoryid=" & Request.Params("categoryid").ToString()   
  6.  End If  
  7.   
  8.  If Not Request.Params("BlogDate"Is Nothing Then  
  9.      m_dBlogDate = CType(Date.Parse(Request.Params("BlogDate")), Date)   
  10.      _Querystring += "BlogDate=" & m_dBlogDate.ToString()   
  11.      If Not Request.Params("DateType"Is Nothing Then  
  12.          m_sViewType = Request.Params("DateType")   
  13.          _Querystring += "BlogDate=" & m_sViewType   
  14.      End If  
  15.  End If  
  16.     
  17. 'set the QuerystringParams property   
  18. ctlPagingControlBottom.QuerystringParams = Querystring  
我想你也应该猜到了,这其实也是一个拼字符串的过程,更让你难受的需要你考虑到整个页面url有可能包含的参数信息,对于同一页面多个模块这是无法知晓的。故这将是无可避免的Bugs.当然DNN分页控件并非一无是处,至少很好的支持SEO(搜索引擎),编程更简单些,故对于一个页面只有单个模块的话无疑是一种简单方便的选择,就拿本站点的SunBlog模块来说,因为一般页面就包含Blog相关模块,利用DNN分页控件无疑是明智的。不过个人觉得DNN分页控件有点粗糙,可定制性极差,最后独立出来开发一个更轻量级,优化版本(更简洁的HTML代码)的分页控件,它至少符合SunBlog模块的需求了,目前已在Codeplex.com开源http://www.codeplex.com/dnnsuntoolkit,有兴趣者不妨对照着DNN分页控件看看其中区别。使用方式跟DNN分页控件差别不大。
参考链接:
DNN Paging Control使用方法:
http://www.cto20.com/cto20/tabid/647/EntryId/46/DNN-Best-Kept-Secrets-Part-1-DNN-Paging-Control.aspx
DNN Paging Control的缺陷
http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/118/postid/96091/scope/posts/Default.aspx
Popular tags: SunBlog, WebControls, Toolkit, SEO, CodePlex
Previous Entry: New Recommedation Module Released ( v1.1 )
Next Entry: Web.config中注册用户控件和自定义控件

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作为我们核心的系统机制,更多相关信息...
版权声明
本站任何言论仅代表个人观点,与作者所在的公司没有任何关系,所有贴子皆以“现状”提供且没有任何担保,同时也没有授予任何权利。