2009-11-28 31 views
18

Tôi có một trang ASPX có tên Default.aspx. Từ codebehind của nó trên Page_Load(), tôi muốn để có được "Default.aspx", một mình, vào một chuỗi:ASP.NET: Lấy tên tệp của Trang

protected void Page_Load(object sender, EventArgs e) 
{ 
    string aspxFileName = ?; 
} 

tôi nên thay thế gì ? với — những gì sẽ làm cho tôi tên tập tin ASPX?

Trả lời

6
protected void Page_Load(object sender, EventArgs e) 
{ 
    string cssFileName = Path.GetFileName(this.Request.PhysicalPath).Replace(".aspx", ".css"); 
} 
+4

Tại sao thay thế .aspx bằng .css? –

+1

@jdk: Tôi nghĩ rằng JamesBrownIsDead đã sao chép và dán từ một trong các mã hiện có của anh ấy. Nhưng ý tưởng chung là có cho tất cả để xem. –

24

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

4

Một số câu trả lời ngắn đã được thực hiện, vì bạn có thể muốn thực hiện điều này từ các Biểu mẫu web khác, đây là giải pháp mở rộng sẽ ảnh hưởng đến tất cả biểu mẫu web trong dự án của bạn một cách thống nhất (bao gồm mã để có được tên tệp theo yêu cầu).

Tạo phương thức mở rộng cho lớp System.Web.UI.Page bằng cách đặt mã này vào tệp. Bạn cần sử dụng .NET 3.5.

namespace MyExtensions { 
    using System.Web.UI; 

    static public class Extensions { 

     /* You can stuff anybody else's logic into this 
     * method to get the page filename, whichever implementation you prefer. 
     */ 
     static public string GetFilename(this Page p) { 
      // Extract filename. 
      return p.AppRelativeVirtualPath.Substring(
       p.AppRelativeVirtualPath.IndexOf("/") + 1 
       ); 
     } 

    } 
} 

Để có được tên tập tin từ bất kỳ Web Form ASP.NET (ví dụ trong phương thức tải mà bạn chỉ định):

using MyExtensions; 

    protected void Page_Load(object sender, EventArgs e) { 
     string aspxFileName = this.GetFilename(); 
    } 

Gọi phương pháp này trên bất kỳ mẫu web trong dự án của bạn.

+2

Vui lòng không thêm mã vào các không gian tên hệ thống. Đó là một ý tưởng hoàn toàn tồi tệ. –

+0

Có, tôi đã tìm một số nhận xét về việc sử dụng không gian tên có thể xuất hiện vì tôi tham khảo bài đăng này từ câu hỏi không gian tên mới của tôi ở đây http://stackoverflow.com/questions/1813746/should-i-put-custom-code-inside- microsofts-bcl-fcl-namespaces - vì vậy tôi sẽ chỉnh sửa mẫu mã này để sử dụng các không gian tên tùy chỉnh. –

+0

Được rồi, đã hoàn thành việc sửa đổi cách sử dụng không gian tên của mẫu này để phù hợp với thực tiễn phổ biến và hủy liên kết mẫu mã này khỏi liên kết nói trên. –

Các vấn đề liên quan