C# 如何在ASP.NET中找到当前页面的(文件)名?
如何在代码隐藏中找到(default.aspx)当前页面或web控件的名称C# 如何在ASP.NET中找到当前页面的(文件)名?,c#,asp.net,C#,Asp.net,如何在代码隐藏中找到(default.aspx)当前页面或web控件的名称 我想编写一个使用此名称的超类。您的意思是要查找当前执行的对象的原始文件名?也就是说,从控件MyControl内部要检索MyControlOnDisk.ascx?通常,这些信息在编译时会丢失,而且,许多页面和控件都是基于分部类构建的,它们来自的文件名被编译到单个程序集中 对于一个页面,您可以使用以下内容,但前提是该页面没有内部重定向,没有从另一个页面实例化为类,它不是母版页,并且不在静态方法中: string curren
我想编写一个使用此名称的超类。您的意思是要查找当前执行的对象的原始文件名?也就是说,从控件MyControl内部要检索
MyControlOnDisk.ascx
?通常,这些信息在编译时会丢失,而且,许多页面和控件都是基于分部类构建的,它们来自的文件名被编译到单个程序集中
对于一个页面,您可以使用以下内容,但前提是该页面没有内部重定向,没有从另一个页面实例化为类,它不是母版页,并且不在静态方法中:
string currentPageFileName = new FileInfo(this.Request.Url.LocalPath).Name;
在控件的情况下,据我所知,这通常是不可能的(它被编译掉了),但也许有人可以对此有所了解
“我想编写一个使用此名称的超类”
我想你是想写一个子类吧?如果您编写一个超类,您只需创建一个虚拟方法,并在子类(页面)中实现它。如果要创建子类,可以使用页面的类名,如下所示:
// current page
public partial class MyLovelyPage : System.Web.UI.UserControl
然后像这样用它来推导:
public partial class NewDerivedPage : MyLovelyPage
如果不使用路由,请执行以下操作:
string sPath = HttpContext.Current.Request.Url.AbsolutePath;
string[] strarry = sPath.Split('/');
int lengh = strarry.Length;
string sRet = strarry[lengh - 1];
我建议另一种选择:
Server.MapPath(Page.AppRelativeVirtualPath)
这与ASP.Net配合使用,以获取当前页面的完整路径和文件名。您能给我一个编译时丢失的示例吗?由于某些内容需要路由到此处理程序,在我的经验中通常不是这样。@Nick:示例将是任何页面。编译后,页面和类之间的映射在aspx处理程序读取的
*.aspx
文件中完成。编译后的类本身(位于bin目录中)将不包含这方面的任何信息。事实上,您可以更改路径的名称而不更改类的名称,只要您认为合适,并在运行时这样做。剩下的唯一信息是RuntimeCompatibilityAttribute
中,该属性存储物理程序集名称(部分包含原始文件的名称,具体取决于编译方法)。@Nick:换言之:该信息根本不在类中。映射是在类之外的文本文件(ASPX文件、web.config或其他方式)中完成的,该页面不知道它是如何在Visual Studio中使用或配置的(并且可以与其他页面一起重用).@Abel-我认为我们讨论的是不同的事情…您似乎试图获取正在执行的类名,在这种情况下,是的,这不是很直接…我们需要更好地定义“current”,而不是.aspx
文件名,它与请求和/或路由非常直接。重新阅读你的答案和问题,你可能是对的,问题的第一行和第二行真的不一致,他似乎是在处理程序类之后,而不是页面,我的错:)@Nick:我同意,问题的第二行似乎与第一行不符。如果@MHF在这里发光就好了。。。
Server.MapPath(Page.AppRelativeVirtualPath)