不知道大家是否用过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这一属性来维护,一般维护代码如下:
- If Not Request.Params("categoryid") Is Nothing Then
- m_sViewType = "category"
- m_oCateggory = CategoryController.GetCategory(CType(Request.Params("categoryid"), Integer))
-
- _Querystring += "categoryid=" & Request.Params("categoryid").ToString()
- End If
-
- If Not Request.Params("BlogDate") Is Nothing Then
- m_dBlogDate = CType(Date.Parse(Request.Params("BlogDate")), Date)
- _Querystring += "BlogDate=" & m_dBlogDate.ToString()
- If Not Request.Params("DateType") Is Nothing Then
- m_sViewType = Request.Params("DateType")
- _Querystring += "BlogDate=" & m_sViewType
- End If
- End If
-
-
- ctlPagingControlBottom.QuerystringParams = Querystring