2017-03-15 66 views
2

我有具有以下結構控制ASCX不存在

ProjectName 
-Controls 
--WebControls 
--MyControl.ascx 

-CustomerControls 
--CustDetails.ascx 

在CustDetails.ascx控制我試圖加載MyControl.ascx一個Web應用程序項目,所以我增加了頁面上的參考(不隱藏代碼)即

<%@ Register Src="../Controls/WebControls/MyControl.ascx" TagPrefix="Ctrl" TagName="CustCtrol" %> 

頁面加載沒有錯誤。

我現在添加下面的代碼,代碼隱藏

LoadControl = Page.LoadControl("MyControl.ascx"); 

但我收到「文件‘/MyControl.ascx’不存在。」

我嘗試更改爲

~/Controls/WebControls/MyControl.ascx 

,但同樣的錯誤路徑。它改成

../Controls/WebControls/MyControl.ascx 

然後得到「不能使用前導..退出頂級目錄上方。

我試過變化和搜索谷歌,但我不能明白的地方IVE哪裏呢?

編輯1

圖片附目錄Directory Image

+1

網站網站或Web表單模板? – IrishChieftain

+0

它的一個Web應用程序(當我建立它在bin目錄中創建一個dll) – Computer

+0

檢查此:http://stackoverflow.com/a/11600980/7565464和此:http://stackoverflow.com/a/709862/ 7565464 – Efe

回答

1

,請注意目錄結構在這裏:

項目名

- 控制

--WebControls

--MyControl.ascx

它說MyControl.ascx是內部控制的目錄,而不是器WebControls。

你有2種選擇:

1)移動MyControl.ascx來器WebControls目錄,重建解決方案,這些代碼將工作:

<%@ Register Src="~/Controls/WebControls/MyControl.ascx" TagPrefix="ctrl" TagName="CustControl" %> 

LoadControl = Page.LoadControl("~/Controls/WebControls/MyControl.ascx"); 

2)保持在您列出的同一個目錄中(控制器目錄中的MyControl.ascx),並將以上代碼中的路徑更改爲以下代碼:

<%@ Register Src="~/Controls/MyControl.ascx" TagPrefix="ctrl" TagName="CustControl" %> 

LoadControl = Page.LoadControl("~/Controls/MyControl.ascx"); 

無需使用使用Server.Mappath。

另外,如果您有公共的方法或隱藏類MyControl代碼中定義的屬性,你需要加載的控制轉換爲MyControl爲了訪問這些方法,只是像我一樣在這裏的屬性:

LoadControl = Page.LoadControl("...") as MyControl; 
//or 
LoadControl = (MyControl)Page.LoadControl("..."); 
+0

我認爲路徑是Controls/WebControls/MyControl.ascx – Anil

+0

@Anil是的,我認爲是這樣,我現在只是測試它,「〜/ path/to/MyControl.ascx」就像一個魅力。 – Efe

+0

@Computer,你可以添加錯誤,當你嘗試「我嘗試改變路徑到 〜/ Controls/WebControls/MyControl.ascx 但同樣的錯誤」,按照Efe這應該工作。 – Anil