老哥,还记得我吧?最近用了你新版的分页控件,发现一个以前就存在的问题,对URL重写支持得不好的问题,在新版中仍旧存在
在未开启你的URL重写的情况下,url会正确,但会将部分被重写的参数又暴露出来,导致错误发生。
在开启你的URL重写的情况下,URL会将由参数重写出来的路径丢失掉。
本想下你的代码自己改了先用的,但是发现缺少部分资源文件,呵呵,无论如何还是告诉你一下比较好吧,MSN上你最近很少上,我又比较急用,所以特地过来发个帖子喊一声:D

解决方案 »

  1.   

    看了下控件的代码,貌似用了url重写之后就使用的相对路径带上了目录,而不单纯的是最后的文件名,但是获取的目录又是真实的目录路径而非重写后的,导致了该问题的发生,而URL重写关闭的话,则直接链到文件上,于是没有这个问题,但却将url重写后应当隐蔽的参数暴露出来了,比如:
    原URL:http://www.webdiyer.com/aa/cc.aspx?name=bb
    重写为:http://www.webdiyer.com/aa/bb/cc.aspx
    在控件下,
    开启url重写后会被输出为/aa/cc_2.aspx这样的,将bb丢失了
    关闭后将会被输出为cc.aspx?name=bb这样的,将name=bb这个应该已经屏蔽的又输出来了
      

  2.   

    解决应该也简单,
    开启分页重写后,不要带路径,直接走文件就可以了
    关了的话,取querystring来分析的时候,不要直接取,而是去抓url来分析。
      

  3.   

    写了段抓querystring来分析的代码,替换掉1119行的urlParams = Page.Request.QueryString;或许就可以解决问题了:D,不过代码写得拙劣,只是能实现功能而已。
    ----------------------------
    System.Collections.Specialized.NameValueCollection urlParams = new System.Collections.Specialized.NameValueCollection();
                string[] QueryStringArray = null;
                string[] tmpArray = null;
                if(Page.Request.RawUrl.IndexOf('?') > -1)
                {
                    QueryStringArray = Page.Request.RawUrl.Substring(Page.Request.RawUrl.IndexOf('?')+1).Split('&');
                }
                for (int i = 0; i < QueryStringArray.Length; i++)
                {
                    tmpArray = QueryStringArray[i].Split('=');
                    if (tmpArray.Length == 2)
                    {
                        urlParams.Add(tmpArray[0], tmpArray[1]);
                    }
                    else if (tmpArray.Length == 1)
                    {
                        urlParams.Add(tmpArray[0], tmpArray[0]);
                    }
                }
                QueryStringArray = null;
                tmpArray = null;
      

  4.   

    至于启用了分页URL重写导致的问题,估计不能用ResolveUrl了吧,前面的代码有问题应该是,将1118和1119两行
    currentUrl = Page.Request.Path;
    urlParams = Page.Request.QueryString;
    替换为:
    urlParams = new NameValueCollection();
                    string[] QueryStringArray = null;
                    string[] tmpArray = null;
                    int IndexOfQueryString = Page.Request.RawUrl.IndexOf('?');
                    if (IndexOfQueryString > -1)
                    {
                        QueryStringArray = Page.Request.RawUrl.Substring(IndexOfQueryString + 1).Split('&');
                        currentUrl = Page.Request.RawUrl.Substring(0, IndexOfQueryString);
                    }
                    else
                    {
                        currentUrl = Page.Request.RawUrl;
                    }
                    if (QueryStringArray != null)
                    {
                        for (int i = 0; i < QueryStringArray.Length; i++)
                        {
                            tmpArray = QueryStringArray[i].Split('=');
                            if (tmpArray.Length == 2)
                            {
                                urlParams.Add(tmpArray[0], tmpArray[1]);
                            }
                            else if (tmpArray.Length == 1)
                            {
                                urlParams.Add(tmpArray[0], tmpArray[0]);
                            }
                        }
                        QueryStringArray = null;
                        tmpArray = null;
                    }
      

  5.   

    对于分页url重写后的问题,这样改就可以兼容了,当然了,之前的重写规则也得做一些配合调整,至于这段代码是否会引发其他问题,还不确定,应当不会。string filePath = Page.Request.FilePath;
    return Path.GetFileNameWithoutExtension(filePath) + "_{0}" + Path.GetExtension(filePath);
    更换为:
    return Path.GetFileNameWithoutExtension(currentUrl) + "_{0}" + Path.GetExtension(currentUrl);return ResolveUrl(string.Format(UrlRewritePattern, (pageIndex == -1) ? "\"+pi+\"" : pageIndex.ToString()));
    更换为:
    return string.Format(UrlRewritePattern, (pageIndex == -1) ? "\"+pi+\"" : pageIndex.ToString());