2009-11-28 31 views
18

我有一个名为Default.aspx的ASPX页面。从它的Page_Load()代码隐藏,我想获得“的Default.aspx”,独自一人,成一个字符串:ASP.NET:获取页面的文件名

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

我应该更换?与—什么会让我的ASPX文件名?

回答

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

为什么用.css替换.aspx? – 2009-11-28 01:16:13

+1

@jdk:我认为JamesBrownIsDead是从他现有的代码中复制并粘贴的。但总的想法是所有人都可以看到的。 – 2009-11-28 01:21:49

24

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

4

一些简短的答案已经采取如此,为了好玩,因为你可能会想从其他Web窗体做到这一点,这里是一个扩展的解决方案,这将影响到所有的Web窗体项目中的均匀(包括代码来获得一个文件名按要求)。

通过将此代码放入文件中,为System.Web.UI.Page类创建扩展方法。你需要使用.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 
       ); 
     } 

    } 
} 

要想从任何ASP.NET Web窗体的文件名(例如负载方法指定):

using MyExtensions; 

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

呼叫项目中的任何Web窗体此方法。

+2

请不要将代码添加到系统名称空间。这是一个彻头彻尾的坏主意。 – 2009-11-28 21:16:37

+0

是的,我想通了一些意见关于命名空间的使用量可能出来,因为我在这里引用http://stackoverflow.com/questions/1813746/should-i-put-custom-code-inside-此帖来自我的新的命名空间的问题microsofts-bcl-fcl-namespaces - 所以我要编辑这个代码示例以使用自定义命名空间。 – 2009-11-28 21:21:49

+0

好的,修改完此示例的名称空间用法以符合常用做法,并从上述链接中取消了此代码示例的链接。 – 2009-11-28 21:28:41