获得页面名称的更好方法

时间:2009-12-09 15:13:52

标签: asp.net

我正在使用它来获取当前页面名称..所以这会返回例如MyPage.aspx

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

必须有一种更简单的方法吗?这意味着必须有.NET框架中的现有方法或属性。

8 个答案:

答案 0 :(得分:43)

我解释这个问题的方式,你正在寻找的是一种有效的方法来检索当前正在执行的 aspx页面的名称,即System.Web.UI.Page。

如果确实如此,则不必处理任何FileInfo对象或命中文件系统。只需使用页面对象上的AppRelativeVirtualPath property

using System;
using System.IO;
using System.Web.UI;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string pageName = Path.GetFileNameWithoutExtension(Page.AppRelativeVirtualPath);
        }
    }
}

如果您想获得当前正在执行的页面的完全限定(或“根”)路径,可以使用Server.MapPath,如下所示:

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

使用AppRelativeVirtualPath即使在使用URL重写时也可以使用,因为它不使用Request.Url(由用户提供),所以您不必担心潜在的恶意数据。

答案 1 :(得分:8)

HttpContext.Current.CurrentHandler会成为您想要的吗?

因为你对物理文件名和页面对象更感兴趣

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

这与来自@Markus Olsson的信息一起,即使您不在页面课程中,也可以在执行期间的任何时候访问该页面。

答案 2 :(得分:8)

我使用Request.Url.Segments.Last(),我觉得它很优雅。

答案 3 :(得分:4)

只是为了兴趣,我用intellisense进行了很少的搜索。没找到任何财产。在其他方面仍然是相同的逻辑。

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

答案 4 :(得分:1)

正如this earlier question of yours的一个答案所指出的,我会选择一个不需要我创建FileInfo对象的选项。

在请求的页面和文件系统对象之间并不总是直接映射,尤其是在路由/ URL重写等进行播放时。

答案 5 :(得分:1)

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

这一个为我工作

答案 6 :(得分:0)

不是更好,但你可以尝试这种扩展方法:

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

只需在您网页的“OnInit”或其他方法中调用它:

string pageName = this.GetPageName();

马克

答案 7 :(得分:0)

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