【发布时间】:2009-11-28 01:04:51
【问题描述】:
我有一个名为 Default.aspx 的 ASPX 页面。从Page_Load() 的代码隐藏中,我想单独将“Default.aspx”变成一个字符串:
protected void Page_Load(object sender, EventArgs e)
{
string aspxFileName = ?;
}
我应该用什么替换 ? - 什么会得到 ASPX 文件名?
【问题讨论】:
我有一个名为 Default.aspx 的 ASPX 页面。从Page_Load() 的代码隐藏中,我想单独将“Default.aspx”变成一个字符串:
protected void Page_Load(object sender, EventArgs e)
{
string aspxFileName = ?;
}
我应该用什么替换 ? - 什么会得到 ASPX 文件名?
【问题讨论】:
System.IO.Path.GetFileName(Request.PhysicalPath);
【讨论】:
protected void Page_Load(object sender, EventArgs e)
{
string cssFileName = Path.GetFileName(this.Request.PhysicalPath).Replace(".aspx", ".css");
}
【讨论】:
为了好玩,已经采取了一些简短的答案,并且因为您可能希望从其他 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 窗体上调用此方法。
【讨论】: