2010-08-29 68 views

回答

10

你是说你想找到当前执行的对象的原始文件名?也就是说,从你想要检索的控件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 
+0

你能给我一个例子,它在编译时会丢失吗?由于事情需要路由到这个处理程序,这通常是*不是我的经验。 – 2010-08-29 10:47:40

+0

@Nick:示例将是任何页面。编译完成后,页面和类之间的映射在'* .aspx'文件中完成,该文件由ASPX处理程序读取。已编译的类本身(位于bin目录中)将不包含任何有关此信息。事实上,无论您认为合适,在运行时都可以更改路径的名称,而不是更改类的名称。唯一保留的信息是存储物理程序集名称(其中部分包含原始文件的名称,取决于编译方法)的“RuntimeCompatibilityAttribute”。 – Abel 2010-08-29 11:13:17

+0

@尼克:用不同的方式说:这个信息根本不在课堂上。该映射是在文本文件(ASPX文件,web.config或其他方式)的类外部完成的,并且该页面不知道它是如何在Visual Studio中使用或配置的(并且可以与其他页面一起使用)。 – Abel 2010-08-29 11:17:15

1

,如果你不使用路由:

string sPath = HttpContext.Current.Request.Url.AbsolutePath; 
     string[] strarry = sPath.Split('/'); 
     int lengh = strarry.Length; 
     string sRet = strarry[lengh - 1]; 
0
Request.ServerVariables["SCRIPT_NAME"] 
2

我会推荐一种替代方案:

Server.MapPath(Page.AppRelativeVirtualPath) 

这与ASP.Net一起使用以获取当前页面的完整路径和文件名。

相关问题