Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET中找到当前页面的(文件)名?_C#_Asp.net - Fatal编程技术网

C# 如何在ASP.NET中找到当前页面的(文件)名?

C# 如何在ASP.NET中找到当前页面的(文件)名?,c#,asp.net,C#,Asp.net,如何在代码隐藏中找到(default.aspx)当前页面或web控件的名称 我想编写一个使用此名称的超类。您的意思是要查找当前执行的对象的原始文件名?也就是说,从控件MyControl内部要检索MyControlOnDisk.ascx?通常,这些信息在编译时会丢失,而且,许多页面和控件都是基于分部类构建的,它们来自的文件名被编译到单个程序集中 对于一个页面,您可以使用以下内容,但前提是该页面没有内部重定向,没有从另一个页面实例化为类,它不是母版页,并且不在静态方法中: string curren

如何在代码隐藏中找到(default.aspx)当前页面或web控件的名称


我想编写一个使用此名称的超类。

您的意思是要查找当前执行的对象的原始文件名?也就是说,从控件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)