Лучший способ получить название страницы
Я использую это, чтобы получить текущее имя страницы. Так это возвращает, например, MyPage.aspx
public string GetCurrentPageName()
{
string urlPath = Request.Url.AbsolutePath;
FileInfo fileInfo = new FileInfo(urlPath);
string pageName = fileInfo.Name;
return pageName;
}
Должен быть более простой способ? Смысл в том, что в .NET Framework должен существовать существующий метод или свойство.
Ответы
Ответ 1
То, как я интерпретирую вопрос, то, что вы ищете, - это эффективный способ получить имя текущей исполняемой страницы aspx, то есть System.Web.UI.Page.
Если это правда, вам не нужно иметь дело с какими-либо объектами FileInfo или обращаться к файловой системе. Просто используйте свойство AppRelativeVirtualPath объекта страницы:
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 (который предоставляется вашими пользователями), вам не нужно беспокоиться о потенциально вредоносных данных.
Ответ 2
Будет ли HttpContext.Current.CurrentHandler
быть тем, что вы ищете?
Поскольку вас больше интересует физическое имя файла и объект страницы, что-то вроде строк
var page = (Page) HttpContext.Current.CurrentHandler;
string url = page.AppRelativeVirtualPath;
Это вместе с информацией от @Markus Olsson может дать вам доступ к странице в любой момент во время ее выполнения, даже если вы находитесь за пределами класса страницы.
Ответ 3
Я использую Request.Url.Segments.Last()
, который я считаю достаточно элегантным.
Ответ 4
Просто для интереса я мало искал с intellisence. не нашел никакой собственности. еще одна и та же логика в обратном направлении.
string currentPageName = System.IO.Path.GetFileName(Request.Url.AbsolutePath);
Ответ 5
Как было указано в одном из ответов на этот более ранний вопрос о вас, я бы выбрал вариант, который не нуждался во мне, чтобы создать FileInfo
.
Существует не всегда прямое сопоставление между запрошенной страницей и объектом файловой системы, особенно при переписывании/перезаписи URL и т.д.
Ответ 6
Dim MyPage As String = Path.GetFileName(Page.AppRelativeVirtualPath.ToString).ToString
Этот работает для меня
Ответ 7
Не намного лучше, но вы можете попробовать этот метод расширения:
public static string GetPageName(this Page myPage)
{
FileInfo fi =new FileInfo(myPage.MapPath(myPage.AppRelativeVirtualPath));
return fi.Name;
}
и просто назовите его на своей странице "OnInit" или любой другой метод как:
string pageName = this.GetPageName();
Марк
Ответ 8
System.IO.Path.GetFileName(Request.PhysicalPath)