AspNetPager的UrlRewriting 動態頁面問題之修改

iDotNetSpace發表於2009-07-29
AspNetPager是做什麼的大家應該很清楚了,不知道的去BaiDu吧。 
AspNetPager本人用的不多,主要是因為一直都在做Sql分頁,把分頁內容寫入自己的控制元件中了,也就沒有使用AspNetPager控制元件,最近做了一個需要對XML資料分頁,自己也寫了一個,不太理想,就想起了AspNetPager了,但是在測試中發現一個小問題,我用的是V7.2版本,不知道新版本中有沒有解決此類問題,我的網站是使用UrlRewriter的,aspx頁面也是動態生成的,如:/Page/118.aspx 
AspNetPager控制元件的UrlRewriter分頁是加入EnableUrlRewriting="true" UrlRewritePattern="./listpage_{0}.aspx" listpage.aspx檔案是固定的,無法使用 UrlRewritePattern="./listpage_{0}.aspx"功能,AspNetPager控制元件的UrlRewriter分頁的另一方法是 UrlRewritePattern="",但UrlRewritePattern="",取出當前狀態的虛擬路徑下的aspx頁面,取不到重寫後的路徑118.aspx,無法實現118_2.aspx的分頁效果。在對AspNetPager控制元件進行修改,以適應動態aspx頁面的分頁:
開啟aspnetpager.cs檔案,找到UrlRewritePattern屬性部分,如下 


AspNetPager的UrlRewriting 動態頁面問題之修改
        public string UrlRewritePattern
        {
            
get
            {
                
object obj = ViewState["URPattern"];
                
if (null == obj)
                {
                    
if (null != cloneFrom)
                        
return cloneFrom.UrlRewritePattern;
                    
if (EnableUrlRewriting)
                    {
                        
if (!DesignMode)
                        {
                            
string filePath = Page.Request.FilePath; 
                            
return Path.GetFileNameWithoutExtension(filePath) + "_{0}" + Path.GetExtension(filePath);
                        }
                    }
                    
return null;
                }
                
return (string)obj;
            }
            
set
            {
                ViewState[
"URPattern"= value;
            }
        }
修改位置:public string UrlRewritePattern 中的 Line:1280 ; Line:1281 
修改內容:1280行原內容:string filePath = Page.Request.FilePath;  
修改後內容: string filePath = Page.Request.RawUrl.ToString(); if (filePath.IndexOf("_") > -1) filePath = filePath.Substring(0, filePath.IndexOf("_")) + filePath.Substring(filePath.IndexOf(".")); 
1281行原內容:return Path.GetFileNameWithoutExtension(filePath) + "_{0}" + Path.GetExtension(filePath); 
修改後內容:return filePath.Substring(0,filePath.IndexOf(".")) + "_{0}" + Path.GetExtension(filePath); 
修改後程式碼如下: 

AspNetPager的UrlRewriting 動態頁面問題之修改
        public string UrlRewritePattern
        {
            
get
            {
                
object obj = ViewState["URPattern"];
                
if (null == obj)
                {
                    
if (null != cloneFrom)
                        
return cloneFrom.UrlRewritePattern;
                    
if (EnableUrlRewriting)
                    {
                        
if (!DesignMode)
                        {
                            
string filePath = Page.Request.RawUrl.ToString();
                            
if (filePath.IndexOf("_"> -1)
                                filePath = filePath.Substring(0, filePath.IndexOf("_")) + filePath.Substring(filePath.IndexOf("."));
                            
return filePath.Substring(0,filePath.IndexOf(".")) + "_{0}" + Path.GetExtension(filePath);
                        }
                    }
                    
return null;
                }
                
return (string)obj;
            }
            
set
            {
                ViewState[
"URPattern"= value;
            }
        }
使用AspNetPager控制元件的UrlRewriter分頁時只加入EnableUrlRewriting="true" 不用加入UrlRewritePattern 加入UrlRewritePattern的要把UrlRewritePattern=""設定成空

還要注意的就是要實現還要在自己的配置檔案中加入UrlRewriter規則,這樣你就可以實現 118_2.aspx的效果了。 
如果你不喜歡這種格式可以修改 return filePath.Substring(0,filePath.IndexOf(".")) + "_{0}" + Path.GetExtension(filePath); 或filePath = filePath.Substring(0, filePath.IndexOf("_")) + filePath.Substring(filePath.IndexOf(".")); 這兩條程式碼把"{0}"放在你想放的位置。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-610733/,如需轉載,請註明出處,否則將追究法律責任。

相關文章