zoukankan      html  css  js  c++  java
  • 使用URL Routing进行数据分页

    代码:/Files/zhuqil/DataPagerExtenderSample.zip

    介绍:

        ASP.NET3.5中包含了一个非常有用的组件 - DataPager控件.这个控件允许你对任何实现了IPageableItemContainer接口的控件的数据进行分页,例如普遍使用的ListView控件.

      在ASP.NET 4.0 web表单开发中新增了另外一个非常有用的功能:URL Routing,第一次看到是在ASP.NET MVC中,这个路由引擎允许你构建一个有规则的用户友好的URLs,这比URL重写更容易实现.

      可问题是这两种功能不能同时用,DataPager也有其它几个限制

      •在最新的ASP.NET 4.0 beta 2中,当QueryStringField属性被指定后,DataPager根本不能使用.这是一个已经被找出来的bug,在vs2010最终版中才会被处理.但是对于前期的使用者,这仍然是个问题.

      •DataPager只支持查询字符串或者分页的javascript的postback.你不能让当前页的索引来指定。

      •DataPager呈现是可以自定义自己的界面,但是不容易实现,特别是有关CSS样式.

    解决方案:

      我的解决方案是写自己的一个分页控件.这个控件像DataPager一样使用IPageableItemContainer接口,但是用了生成不同的用户界面生成的方法.

      控件使用标准的HyperLink控件,通过配置设置NavigateUrl属性,如果没有设置,HyperLink控件将会隐藏或者无效.

      这个控件继承了IPageableItemContainer.

    DataPagerExtender控件的属性:

     TargetControlID - 目标分页控件的ID

     PageSize - 一页的大小 - 默认为10

     PageIndexSource - 这个属性能得到当前页码索引. 可以是RouteParameter 也可以是QueryString

     CollectionKey - 设置查询字符串字段或路线参数名称(见上文),以获得当前页的索引的

     InactiveLinkMode-指定当一个link被设置为inactive如何表现(也就是说:"previous"link是为第一页).默认值是Ignore,这种情况下,这个link是被忽视的 和保持不变.当设置为  Hide时,这个特别的link是隐藏的.当设置为Disable,这个控件是无效的.

     FirstLinkID, PreviousLinkID, NextLinkID, LastLinkID - 这些属性指定导航的HyperLink控件的ID,如果你给这些属性空值.它将会被忽略.这样,如果你只想要 "previous" 和"next" links,你只要设定 PreviousLinkIDNextLinkID

    使用DataPagerExtender控件

    首先,用通常的方式显示你的数据在一个ListView控件上面.然后,添加4个HyperLink控件分别导向第一页, 上一页, 下一页, 和最后一页

    代码

    <asp:ListView ID="ListView1" runat="server" DataSourceID="LinqDataSource1">
      
    <LayoutTemplate>
        
    <table>
          
    <thead>
            
    <tr>
              
    <th>ProductID</th>
              
    <th>ProductName</th>
              
    <th>UnitPrice</th>
            
    </tr>
          
    </thead>
          
    <tbody>
            
    <asp:PlaceHolder ID="itemPlaceholder" runat="server" />
          
    </tbody>
          
    <tfoot>
            
    <tr>
              
    <td colspan="3">
                
    <div style="float: left">
                  
    <asp:HyperLink ID="LinkFirst" runat="server" Text="<< first" />
                  
    <asp:HyperLink ID="LinkPrevious" runat="server" Text="< previous" />
                
    </div>
                
    <div style="float: right">
                  
    <asp:HyperLink ID="LinkNext" runat="server" Text="next >" />
                  
    <asp:HyperLink ID="LinkLast" runat="server" Text="last >>" />
                
    </div>
              
    </td>
            
    </tr>
          
    </tfoot>
      
    </LayoutTemplate>
      
    <ItemTemplate>
        
    <tr>
          
    <td>
            
    <asp:Label runat="server" Text='<%# Eval("ProductID") %>' />
          
    </td>
          
    <td>
            
    <asp:Label runat="server" Text='<%# Eval("ProductName") %>' />
          
    </td>
          
    <td>
            
    <asp:Label runat="server" Text='<%# Eval("UnitPrice") %>' />
          
    </td>
        
    </tr>
      
    </ItemTemplate>
    </asp:ListView>
    <asp:LinqDataSource ID="LinqDataSource1" runat="server" TableName="Products"
                        ContextTypeName
    ="NorthwindDataContext" OrderBy="ProductName" 
                        Select
    ="new (ProductID, ProductName, UnitPrice)" />

    然后添加DataPagerExtender (在我的案例,我以my为前缀注册它,这里我使用了查询字符串的方式)

    代码
    <my:DataPagerExtender ID="DPE1" runat="server" TargetControlID="ListView1" 
                          PageIndexSource
    ="QueryString" CollectionKey="Page" 
                          FirstLinkID
    ="LinkFirst" LastLinkID="LinkLast" 
                          NextLinkID
    ="LinkNext" PreviousLinkID="LinkPrevious" />

    使用DataPagerExtender的路由

    首先,你必须稍微修改上面的控件的引用:

    代码
    <my:DataPagerExtender ID="DPE1" runat="server" TargetControlID="ListView1" 
                          PageIndexSource
    ="RouteParameter" CollectionKey="Page" 
                          FirstLinkID
    ="LinkFirst" LastLinkID="LinkLast" 
                          NextLinkID
    ="LinkNext" PreviousLinkID="LinkPrevious" />

    然后,你必须创建一些路由路线,它包含了{Page}的线路参数(可能会更多).这个参数是必要的,默认情况下是‘1’,因此,没有明确的规定第一页的显示.

    代码
    void Application_Start(object sender, EventArgs e) {
        RouteTable.Routes.MapPageRoute(
    "PagedProducts",     // route name
            "pagedproducts/{Page}",                         // path
            "~/Products2.aspx",                             // internal handler
            false,                                          // do not check physical file
            new RouteValueDictionary { { "Page""1" } });  // default to first page
    }

    限制:

    相比原始的DataPager控件,我的DataPagerExtender 有几个限制:

    •它不支持分页回发。

    •只有下一页/上一页等,分页风格,没有一列的数字来支持跳页的功能。

    •没有很明显的方式来显示分页信息.

    原文地址:http://www.codeproject.com/KB/aspnet/paging_with_url_routing.aspx

     



    (全文完)


    以下为广告部分

    您部署的HTTPS网站安全吗?

    如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!

    SSL检测评估

    快速了解HTTPS网站安全情况。

    安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。

    SSL证书工具

    安装部署SSL证书变得更方便。

    SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。

    SSL漏洞检测

    让服务器远离SSL证书漏洞侵扰

    TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。

  • 相关阅读:
    win7每天出现taskeng.exe进程的解决方案
    hibernate插入中文字段时,无法插入数据库
    本页面用来演示如何通过JS SDK,创建完整的QQ登录流程,并调用openapi接口
    不同项目之间的通信
    404错误、405错误、500错误出错原因
    linux 下启动tomcat 时没有执行权限
    webservice文件上传下载(byte[] 实现方式)
    文件路径获取
    单个文件复制
    myeclipse svn重新定位 本地文件 svn 重新定位
  • 原文地址:https://www.cnblogs.com/zhuqil/p/1621884.html
Copyright © 2011-2022 走看看