我有一个Web应用程序项目,它的结构如下
ProjectName
-Controls
--WebControls
--MyControl.ascx
-CustomerControls
--CustDetails.ascx在CustDetails.ascx控件中,我试图加载MyControl.ascx,因此我在页面上添加了一个引用(不是代码隐藏),即
<%@ 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则get“不能使用前导.退出顶部目录。”
我尝试过各种变体,搜索过谷歌,但我不知道我哪里出了问题?
编辑1
附目录图像

发布于 2017-03-15 12:32:36
请注意这里的目录结构:
ProjectName -Controls -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)将其保存在与您所列出的目录相同的目录(控件目录中的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("...");https://stackoverflow.com/questions/42808642
复制相似问题