【发布时间】:2020-01-21 20:43:49
【问题描述】:
将ascx 和aspx 文件放入不同文件夹后,如何更新对用户控件的引用?
我不习惯使用 ASP.NET Web 窗体项目,但我继承了这个项目。当我第一次收到这个项目时,每个文件都在根目录下;没有任何文件夹。我已经开始将文件放入文件夹并更新路径。
但是,当我尝试加载用户控件时,我收到此错误:
不能使用前导 .. 退出顶级目录。
我的用户控件位于:
myProject\controls\Widget.asxc
我的页面位于:
myProject\Pages\Activity\AST_Page.aspx
来自AST_Page.aspx的标记:
<%@ Register TagPrefix="tf" TagName="Cost" Src="..\..\controls\Widget.ascx" %>
我的理解是:
- 当用户导航到
AST_Page.aspx时,当前路径为myProject\Pages\Activity\。 - 以
..\..\开始路径应该把我放在myProject\。 - 因此,
..\..\controls\Widget.ascx实际上指向了myProject\controls\Widget.asxc。 - 我的项目可以访问我的
myProject\。
如果我将..\..\controls\Widget.ascx 更改为..\controls\Widget.ascx,我会收到一个关于找不到文件的不同错误,这是因为Widget.ascx 不在myProject\Pages\controls\ 之下。
【问题讨论】:
-
这可能是一个愚蠢的问题,但为了安全起见:您确定
Pages和controls都不是虚拟应用程序吗?我认为它们不是,因为您刚刚创建了这些目录 - 但如果是这种情况,您会得到同样的错误。 -
另外,如果仅出于测试目的,我建议尝试通过根相对 (
/controls/Widget.ascx) 和应用程序根相对 (~/controls/Widget.ascx) 路径调用它,以查看它们的行为。需要明确的是,所有这三个都应该是等效的,但是比较它们的输出可能会提供对正在发生的事情的更多见解。 -
“~”给了我同样的错误。但是,我尝试指向一个不存在的文件 (/controls/FAKE.ascx),但错误消息已更改。对于 FAKE.ascx,错误是:“文件 '/MyProject/controls/FAKE.ascx' 不存在。”
-
在看到 Jeremy Caney 的帖子后,我决定逐行注释掉我的 aspx。我找到了以“~/../../”开头的路径。必须是从副本和替换。因此,它与 ascx 无关。
-
你可以将控件拖放到页面上,然后VS会为你确定路径吗?
标签: asp.net webforms visual-studio-2019