控制ascx不存在

时间:2017-03-15 11:37:00

标签: c# asp.net

我有一个Web应用程序项目,它具有以下结构

ProjectName
-Controls
--WebControls
--MyControl.ascx

-CustomerControls
--CustDetails.ascx

在CustDetails.ascx控件中我试图加载MyControl.ascx,所以我在页面上添加了一个引用(不是代码隐藏),即

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

页面加载时没有错误。

我现在将以下代码添加到codebehind

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

但我收到 &#34;文件&#39; /MyControl.ascx'不存在。&#34;

我尝试将路径更改为

~/Controls/WebControls/MyControl.ascx

但同样的错误。将其更改为

../Controls/WebControls/MyControl.ascx

然后得到&#34; 不能使用前导..退出顶级目录。&#34;

我尝试过变种并搜索谷歌,但我无法理解我哪里出错了?

编辑1

目录Directory Image附加的图片

1 个答案:

答案 0 :(得分:1)

注意这里的目录结构:

  

项目名

     

- 控制

     

- 器WebControls

     

- MyControl.ascx

它说MyControl.ascx在Controls目录中,而不是WebControls。

您有两个选择:

1)将MyControl.ascx移动到WebControls目录,重建解决方案,这些代码将起作用:

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

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

2)将它保存在您列出的目录中(Controls目录中的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("...");