1)对于没有 runat =“server”属性的Html元素,绝对和相对路径将按原样发送到浏览器。但是使用服务器控件,Asp.Net运行时提供 URL重新定位功能,其中相对于主页,主题或用户控件的URL(由主页,主题或用户控件中包含的服务器控件指定)动态修改这样浏览器可以使用相对于发送到浏览器的最终页面的URL来定位引用的资源。
a)除了母版页,主题和用户控件之外,还有其他需要网址重新定位功能的情况吗?
2)假设 test.aspx 位于Web应用程序的根目录( WebApp20 / test.aspx ),而图像文件位于 WebApp20 /Images/award.gif ,然后在发送到浏览器的最终页面中,以下两个URL都将解析为 src =“Images / award.gif”。
Test.aspx文件:
<img id="A" src="Images/award.gif" alt="image" runat="server" />
<br>
<img id="B" src= "~/Images/award.gif" alt="image” runat="server" />
虽然我知道Asp.Net将“〜”解析为当前Web应用程序的根目录,我也看到了在某些情况下使用它的好处,在上面的示例中,控件B并不需要它来查找一个图像,因此B可以改为 src =“Images / award.gif”。然而,我已经看到了很多代码示例,其中程序员使用“〜/ Images / award.gif”而不是“Images / award.gif”。
a)因此,在上面的示例中,我们应该更喜欢使用“〜/ Images / award.gif”而不是“Images / award.gif”
EM>
感谢名单
答案 0 :(得分:3)
在这种情况下,tilda(〜)是一种简写。它用于表示应用程序的根目录。 Tilda由ResolveClientUrl和ResolveUrl方法读取,它们根据实际的根返回路径(您也可以直接调用这些方法 - 更多信息见下面的链接)。
使用此方法有几个很好的理由:
原因1
部署到一个站点时,您的应用程序的root可能是'/',而在另一个站点上,它可能是'/ somefolder /'。在这两种情况下,使用此方法将为您提供正确的路径。
原因2
如果在用户控件或母版页中包含此图像标记,则生成的页面可能有多个路径(因此,图像文件夹的相对路径可能因页面而异)。这将为您提供一种方法,无论您在应用程序中的哪个位置都可以访问images文件夹。
原因3
在开发过程中,事情发生了很大变化。您使用一组要求启动应用程序,客户端会改变主意。您可以使用一种设计启动应用程序,并看到您需要更改内容。在任何一种情况下,您可能需要移动页面(进出文件夹)。使用此方法可以移动文件而无需重写它们。
答案 1 :(得分:1)
控件可能包含在各种路径中的页面中。在这种情况下,控件的html需要使用〜或其他方法指定完整路径,因为它无法保证相对路径在包含它的所有页面中都有效。
答案 2 :(得分:1)
URL重写是另一个可以使用(或应该避免)变基的示例。
例如,如果您致电:
context.RewritePath(url, false);
这会阻止目标网页中的网址重新绑定到新网址,以便网页中的相对网址仍可正常运行。将第二个参数设置为true将导致页面上的URL被重新定位。