2009-12-09 67 views
21

我用它來獲取當前頁面name..so這個返回例如MyPage.aspx更好的辦法讓頁面名稱

public string GetCurrentPageName() 
{ 
    string urlPath = Request.Url.AbsolutePath; 
    FileInfo fileInfo = new FileInfo(urlPath); 
    string pageName = fileInfo.Name; 
    return pageName; 
} 

必須有一個更簡單的方法?這意味着人們會想到.NET框架中的現有方法或屬性。

回答

7

請問HttpContext.Current.CurrentHandler是你在找什麼?

既然你更感興趣的物理文件名VS頁面對象的東西沿着

var page = (Page) HttpContext.Current.CurrentHandler; 
string url = page.AppRelativeVirtualPath; 

這與@Markus奧爾森的信息沿線可以給你訪問該頁面中的任何點在執行期間,即使你不在頁面類中。

0

也不遑多讓,但你可以試試這個擴展方法:

public static string GetPageName(this Page myPage) 
{ 
    FileInfo fi =new FileInfo(myPage.MapPath(myPage.AppRelativeVirtualPath)); 
    return fi.Name; 
} 

,只是把它在你的頁面上的 「OnInit的」 或任何方法爲:

string pageName = this.GetPageName(); 

馬克

3

僅僅爲了興趣,我用智慧進行了很少的搜索。沒有找到任何財產。其他方面仍然是相同的邏輯。

string currentPageName = System.IO.Path.GetFileName(Request.Url.AbsolutePath); 
1

正如指出的答案之一this earlier question of yours,我會去爲沒有需要我創建一個FileInfo對象的選項。

在請求的頁面和文件系統對象之間並不總是有直接的映射關係,特別是當路由/ URL重寫等進來時。

34

我解釋這個問題的方式是檢索當前正在執行的名稱的有效方式,即System.Web.UI.Page。

如果這是真的,你不應該處理任何FileInfo對象或命中filesytem。只需使用頁面對象上的AppRelativeVirtualPath property即可。

如果你wan't讓你當前正在執行的網頁的完全限定(或「根」)路徑,您可以使用Server.MapPath這樣

string path = Server.MapPath(Page.AppRelativeVirtualPath); 

使用AppRelativeVirtualPath更是把工作的好處當你使用url重寫,並且因爲它不使用Request.Url(它是你的用戶提供的),你不必擔心潛在的惡意數據。

+1

不需要** Server **。MapPath - 「Page」類本身也有一個MapPath方法 – 2009-12-09 20:17:44

+1

@mars_c nice catch =) – 2009-12-09 22:05:44

1

昏暗我的頁面的String = Path.GetFileName(Page.AppRelativeVirtualPath.ToString)的ToString

這一個工作,我

3

我用Request.Url.Segments.Last(),我認爲這是不夠優雅。

0
System.IO.Path.GetFileName(Request.PhysicalPath)