2009-12-09 20 views
21

Tôi đang sử dụng này để có được những trang hiện name..so này trả về ví dụ MyPage.aspxCách tốt hơn để có được trang Tên

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

Cần phải có một cách dễ dàng hơn? Có nghĩa là phải có một phương pháp hoặc tài sản hiện có trong khung công tác .NET.

Trả lời

7

Có phải HttpContext.Current.CurrentHandler là những gì bạn đang tìm kiếm không?

Vì bạn đang quan tâm nhiều hơn trong tên tập tin vật lý vs các đối tượng trang một cái gì đó dọc theo dòng của

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

này cùng với các thông tin từ @Markus Olsson có thể cung cấp cho bạn truy cập vào trang này trong bất kỳ điểm nào trong quá trình thực hiện ngay cả khi bạn ở bên ngoài lớp trang.

0

Không tốt hơn nhiều, nhưng bạn có thể thử phương pháp mở rộng này:

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

và chỉ cần gọi nó trong "OnInit" trang của bạn hoặc bất cứ phương pháp như:

string pageName = this.GetPageName(); 

Marc

3

chỉ vì lợi ích tôi đã tìm kiếm rất ít với intellisence. không tìm thấy bất kỳ tài sản nào. vẫn logic tương tự theo cách khác.

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

Như đã chỉ ra ở một trong những câu trả lời cho this earlier question of yours, tôi muốn đi cho một lựa chọn mà không cần tôi để tạo ra một đối tượng FileInfo.

Không phải lúc nào cũng có ánh xạ trực tiếp giữa trang được yêu cầu và đối tượng hệ thống tệp, đặc biệt khi định tuyến/ghi đè url v.v. đến để phát.

34

Cách tôi diễn giải câu hỏi bạn đang tìm kiếm là cách hiệu quả để truy xuất tên của trang đang thực hiện aspx, tức là System.Web.UI.Page.

Nếu điều đó đúng, bạn không cần phải đối phó với bất kỳ đối tượng FileInfo nào hoặc nhấn vào tệp tin. Chỉ cần sử dụng AppRelativeVirtualPath property trên đối tượng trang.

Nếu bạn wan't để có được đầy đủ đường dẫn (hoặc "bắt nguồn") của trang hiện đang thực hiện, bạn có thể sử dụng Server.MapPath như thế này

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

Sử dụng AppRelativeVirtualPath có lợi ích của làm việc ngay cả khi bạn đang sử dụng viết lại url và vì nó không sử dụng Request.Url (được cung cấp bởi người dùng của bạn), bạn không phải lo lắng về dữ liệu độc hại tiềm ẩn.

+1

không cần ** Máy chủ **. MapPath - chính lớp "Trang" có phương pháp MapPath, quá –

+1

@mars_c nice catch =) –

1

Dim MyPage As String = Path.GetFileName (Page.AppRelativeVirtualPath.ToString) ToString

này một làm việc cho tôi

3

tôi sử dụng Request.Url.Segments.Last(), mà tôi nghĩ là đủ thanh lịch.

0
System.IO.Path.GetFileName(Request.PhysicalPath) 
Các vấn đề liên quan