本帖最后由 zx_001 于 2013-07-05 18:45:19 编辑

解决方案 »

  1.   

    设置URL的重写格式,老是没有传值成功,最后仔细看了AspNetPager控件源码里的帮助文档,才发现除Page以外的参数,设置格式:%参数名%,必须要和原始Url的参数名相同,控件上没特别说明,我正是忽略这点,发了很多时间调试。
    再拿个简单的例子说明下:
    原始Url:http://www.xxx.com/articlelist.aspx?type=aspnet&page=2
    重写Url:http://www.xxx.com/articlelist/aspnet_2.htm
     
    下面是aspx页面设置:
     
    <webdiyer:AspNetPager ID="AspNetPager1" runat="server" AlwaysShow="true"  
                    PageSize="20" onpagechanging="AspNetPager1_PageChanging" FirstPageText="首页"  
                    LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" UrlPaging="True" 
                    ShowFirstLast="False" ShowPageIndexBox="Never"  EnableUrlRewriting="True" UrlRewritePattern="/articlelist/%type%_{0}.htm" ></webdiyer:AspNetPager>
     
    要注意的是:UrlRewritePattern="/articlelist/%type%_{0}.htm" 规则中的%type%,就是原始Url中的参数名type,设置相同即可。 aspnetpager多参数URL重写在webconfig中, "&"这个字符的问题,&amp;转义失败:这里用的是msdn里头的UrlRewriter.dll组件。在webconfig中, "&"这个字符的问题,&amp;转义失败;取代方法: <![CDATA[YourUrlRewritePattern]]><RewriterRule>
            <LookFor>~/(\d{0,10})/exparticlelist-(\d{0,10}).aspx</LookFor>
            <SendTo> <![CDATA[~/exparticlelist.aspx?expid=$1&page=$2]]> </SendTo> 
      </RewriterRule>
      

  2.   

    首先设置aspnetpager的EnableUrlRewriting属性为true,然后设置UrlRewritePattern属性自己设置得参数可以通过%自己设置的参数名%来获取其值,用{0}可以获取UrlPageIndexName参数得值例如原来的URL为newsList.aspx?newsId=12345重写为newsList_123456.html
    设置UrlRewritePattern属性为:newslist_%newsId%/{0}然后在重写规则里再添加一个<RewriterRule>
            <LookFor>~/news/newslist_(\d+)/(\d+)</LookFor>
            <SendTo><![CDATA[~/news/newslist.aspx?newsId=$1&page=$2]]></SendTo>
          </RewriterRule>
    规则中的page就是aspnetpager控件得UrlPageIndexName属性的值
      

  3.   


    谢谢您,您没看懂我的意思,可能我描述的不太清楚
    这是我的webconfig
    /*没有参数也不用分页*/
     <RewriterRule>
            <LookFor>~/exchange.html</LookFor>
            <SendTo>~/Aspx/exchange.aspx</SendTo>
          </RewriterRule>
    /*有参数时不用分页*/
          <RewriterRule>
            <LookFor>~/exchange/list-(.[0-9]*).html</LookFor>
            <SendTo>~/Aspx/exchange.aspx?classid=$1</SendTo>
          </RewriterRule>
    /*有参数的分页*/
          <RewriterRule>
            <LookFor>~/exchange/list-(.[0-9]*)-(.[0-9]*).html</LookFor>
            <SendTo>~/Aspx/exchange.aspx?classid=$1&amp;page=$2</SendTo>
          </RewriterRule>
    /*没有参数的分页*/
          <RewriterRule>
            <LookFor>~/exchange/(.[0-9]*).html</LookFor>
            <SendTo>~/Aspx/exchange.aspx?page=$1</SendTo>
          </RewriterRule>
      

  4.   

    "DropDownList我是用的是onselectedindexchanged事件
    事件里面调用的是BindPage()方法,把条件传过去"
    楼主这是应该指定html页面的地址然后后台加载的时候根据参数取出数据了
    dropdownlist去请求的form表单地址估计是原始的aspx地址吧
      

  5.   


    那应该怎么处理呢
    就是你onselectedindexchanged事件直接response.redirect一个html地址啊,这个地址包含了你的分页和分类参数啊,然后你去在page_load事件里面去判断参数并且加载数据啊
      

  6.   


    那应该怎么处理呢
    就是你onselectedindexchanged事件直接response.redirect一个html地址啊,这个地址包含了你的分页和分类参数啊,然后你去在page_load事件里面去判断参数并且加载数据啊那怎么阻止onselectedindexchanged事件response.redirect地址呢
      

  7.   

    AspNetPager不是支持伪静态的么
    注意:设置EnableUrlRewriting="true"将自动设置UrlPaging="true"(默认为false),无需再单独设置该属性的值。
      

  8.   


    那应该怎么处理呢
    就是你onselectedindexchanged事件直接response.redirect一个html地址啊,这个地址包含了你的分页和分类参数啊,然后你去在page_load事件里面去判断参数并且加载数据啊那怎么阻止onselectedindexchanged事件response.redirect地址呢
    我是说你直接在onselectedindexchanged事件里面写Response.Redirect("你的url地址注意是伪静态后的地址以及参数")
      

  9.   


    是的,
    我现在情况是页面加入条件对查询出来的数据进行筛选,在筛选的过程中,页面刷新了,伪静态没有保持 
    楼主的问题标题应该改改,你这个问题和AspNetPager没有任何关系,标题扯上AspNetPager导致楼上的都围绕着AspNetPager回答去了。 你的问题是使用了服务端控件,服务端控件在更改值时是有一次postback的, 服务端的,postback之后自然就是服务端的页面地址了。
    参见:http://www.cnblogs.com/JeffreyZhao/archive/2008/01/13/Url-Rewrite-3.html
      

  10.   


    那应该怎么处理呢
    就是你onselectedindexchanged事件直接response.redirect一个html地址啊,这个地址包含了你的分页和分类参数啊,然后你去在page_load事件里面去判断参数并且加载数据啊那怎么阻止onselectedindexchanged事件response.redirect地址呢
    我是说你直接在onselectedindexchanged事件里面写Response.Redirect("你的url地址注意是伪静态后的地址以及参数")但是我的onselectedindexchanged事件里面不需要跳转,你让我用Response.Redirect跳转走了,页面相当于又重新加载了,我需要的是在onselectedindexchanged事件里重新调用绑定数据的方法,重新绑定数据
      

  11.   


    是的,
    我现在情况是页面加入条件对查询出来的数据进行筛选,在筛选的过程中,页面刷新了,伪静态没有保持 
    楼主的问题标题应该改改,你这个问题和AspNetPager没有任何关系,标题扯上AspNetPager导致楼上的都围绕着AspNetPager回答去了。 你的问题是使用了服务端控件,服务端控件在更改值时是有一次postback的, 服务端的,postback之后自然就是服务端的页面地址了。
    参见:http://www.cnblogs.com/JeffreyZhao/archive/2008/01/13/Url-Rewrite-3.html哦,谢谢,可能我描述不太清楚
      

  12.   

    但是我的onselectedindexchanged事件里面不需要跳转,你让我用Response.Redirect跳转走了,页面相当于又重新加载了,我需要的是在onselectedindexchanged事件里重新调用绑定数据的方法,重新绑定数据
    为什么不需要跳转走呢,你postback下还不是要去服务器返回下数据回来,你在page_load里用if (!IsPostBack)这个就可以防止页面全部提交了
      

  13.   

    如果你不想跳转,想保持页面静态化的,其实也有一个方法,我想问下,你静态化地址用的是哪个重写组件?如果是iirf就有办法实现你想要的效果
      

  14.   


    为什么不需要跳转走呢,你postback下还不是要去服务器返回下数据回来,你在page_load里用if (!IsPostBack)这个就可以防止页面全部提交了
    跳转之后 我的查询条件就没了,
      

  15.   

    UrlRewriter.dll这个的ini配置文件是这样的吗?
    RewriteRule ^/AboutUs/terms-of-use\.html  /Terms-of_Use.aspx 
      

  16.   


    为什么不需要跳转走呢,你postback下还不是要去服务器返回下数据回来,你在page_load里用if (!IsPostBack)这个就可以防止页面全部提交了
    跳转之后 我的查询条件就没了,这个还不简单,你把查询条件也当作参数重写不就行了,你在重写规则多写个就行
      

  17.   


    为什么不需要跳转走呢,你postback下还不是要去服务器返回下数据回来,你在page_load里用if (!IsPostBack)这个就可以防止页面全部提交了
    跳转之后 我的查询条件就没了,这个还不简单,你把查询条件也当作参数重写不就行了,你在重写规则多写个就行更复杂了
      

  18.   

    问题已经得到解决,感谢11楼wjqqonline解决办法http://www.cnblogs.com/JeffreyZhao/archive/2008/01/13/Url-Rewrite-3.html