2010-08-29 70 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一起使用以獲取當前頁面的完整路徑和文件名。

相關問題