为什么我应该使用@Url.Content("~/blah-blah-blah")?

40
我无法理解在ASP.NET MVC中,使用Url.Content()方法所带来的好处。例如,你会看到src='@Url.Content("~/Contents/Scripts/jQuery.js")'。我为什么要使用它?相比于像src='/scripts/jquery.js'这样的普通引用,使用它有哪些好处、优势等等? 更新:根据答案,除了处理虚拟文件夹以外,还有没有其他使用它的原因?因为我没有看到那么多使用虚拟应用程序的情况(当然这并不意味着它没有被广泛使用)。

1
你从来没有在一个网站下有多个应用程序存在过。 - Adam Tuliper
那么,他们使用 @Url.Content 的唯一原因是什么?如果是这样,我们是否可以简单地停止在一个网站解决方案中使用它? - Saeed Neamati
1
抱歉回复晚了 - 最好还是包含它。你永远不知道网站结构将来会如何变化。但从技术上讲,如果您永远不会更改其位置,并且每个网站只有一个应用程序,没有任何虚拟目录在其下面等等,那么您可以使用src='/scripts/whatever.js'。 - Adam Tuliper
3个回答

34
通常情况下,您的网页应用程序被发布为:www.yoursite.com/。符号~表示站点根目录,即/
然而,如果您将站点发布在虚拟目录www.yoursite.com/mywebapp/中,则符号~会匹配/mywebapp/。 将URL中的"/"字符硬编码会导致页面引用错误。

26
映射虚拟路径是其唯一的目的。如果您永远不需要映射它们,并且确定您的应用程序或其文件夹不会位于其他应用程序下面,那么它对您没有任何用处。
Microsoft Learn 中可以注意到,如果您不使用~,结果也不会有任何变化:

如果指定的内容路径不以波浪符(~)字符开头,此方法将返回未更改的 contentPath。


感谢@AdamTupliper。然后我就从我的工具箱中删除了这个方法 ;)。 - Saeed Neamati
7
请注意,在MVC4中,部分操作会自动处理,例如脚本标签,您只需指定src="~/scripts/whatever.js",Razor现在会自动为您映射它,无需使用url.content。 - Adam Tuliper

16

如果您的应用程序根路径不是服务器的根路径,则Url.Content("~/")非常有用,它返回应用程序的根文件夹。


我从未遇到过这个问题。但是加一。 - Saeed Neamati
从我的经验来看,在 Visual Studio 中悬停在链接上时,使用 ~ 不会显示任何图像内容。提示无法找到 [路径]。 - Daniel Jackson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接