调试 url 与项目 url

问题描述 投票:0回答:1

调试时找不到我的aspx页面。 使用 aspx 页面(不是 MVC)的 ASP.NET Web 应用程序。

我有以下 HTML 代码:

<Head title="WhycantIdebugbutafterdeploythisworks" url="#">
<MenuItem title="Some Menu" url="/ApplicationName/AFolder/First.aspx" />
<MenuItem title="Another Menu" url="/ApplicationName/AFolder/Second.aspx" /></Head>

发布后,找到并正确显示aspx页面:

url=http://ApplicationName/AFolder/First.aspx
,但是当我调试我的应用程序时,它找不到aspx页面并给出错误消息
"The file '/ApplicationName/AFolder/First.aspx' does not exist."
。调试
url=https://localhost:44322/AFolder/First.aspx

如果我从 url HTML 属性中删除

/ApplicationName
,调试可以工作,但部署的版本却不能。

如何修复 HTML 以便该 url 在调试和 IIS 中都有效?

html asp.net visual-studio-debugging
1个回答
0
投票

作为一般规则,您不要在任何网址中包含“应用程序名称”。

您只需提供文件夹的路径名,然后提供网页。

您可以使用“~/”指定“root”,但前提是您有

runat="server"
标签。

所以,你的网址可以这样说:

<MenuItem title="Some Menu" runat="server" url="~/AFolder/First.aspx" />
<MenuItem title="Another Menu" runat="server" url="~/AFolder/Second.aspx" />

现在,在大多数情况下,您可以仅使用 /Afolder/xxxx.aspx,但是这将是当前网页的相对寻址,因此如果您位于不同的位置或文件夹,大多数菜单将不起作用。

因此,如果可能,请尝试添加/使用

runat="server"
标签,这样系统将解析并允许使用“~/”。

在 JavaScript 代码中使用“~/”是不合法的,并且在大多数情况下对于简单的超链接来说也是不合法的。

但是,对于诸如

response.Redirect("~/somefolder/xxxx.aspx")
之类的代码隐藏,你没问题。

对于页面(或菜单)上的超链接控件?

如上所述,如果相关控件具有

runat="server"
标签,则可以包含/拥有/使用“~/”。

这样,网站的基本根 URL 就不再重要,更重要的也永远不会重要。

所以,既然像超链接这样的asp.net控件有

runat="server"
,那么这个URL就是合法的:

  <asp:HyperLink ID="HyperLink1" runat="server" 
     NavigateUrl="~/Test/GridRadio.aspx">HyperLink</asp:HyperLink>

但是,如果您使用纯简 HTML 链接,则不能使用上面的“~/”。 (这意味着您必须考虑您所在的文件夹)。

那么,如果我位于 Grids 文件夹中,并且我想要上面的链接?

我有这个

       http://localhostxxxx/Grids/MyGrid.aspx

我想导航到

       http://localhostxxxx/Test/GridRadio.aspx

然后一个普通的 Jane(非服务器)端将如下所示:

<a href="../Test/GridRadio.aspx">link text</a>
               

因此,请注意我们如何使用

..
“下降”一级文件夹,然后返回到测试文件夹。

但是,如上所述,使用服务器端控件,您可以(并且应该)始终使用“~/folder/page.aspx”类型的格式,并且它将始终适合您。

因此,不要包含应用程序名称,也不包含主机名,所有内容都应该始终是根文件夹的路径,并且在 99% 的情况下,使用“~/”与服务器端控件。

因此,如果您选择“始终”使用相对寻址,那么您必须考虑当前页面的“嵌套”以及您要导航到的目标页面。

© www.soinside.com 2019 - 2024. All rights reserved.