首先我们有以下表格:
<link href="../../../content/somecontent" />
这很烦人(需要逐个计算路径深度)并且最容易出错。有人想出了这个:
<link runat="server" href="~/content/somecontent" />
这更容易,但我不知道我可以随意使用该解决方案。可以在任何地方使用吗?它适用于Spark吗?它如何影响渲染速度?最后也是最差的度假胜地是:
<link href="/content/somecontent" />
这不允许Web应用程序驻留在我不喜欢的子目录中,尤其是出于测试目的。还有其他更好的方式我不知道吗?
答案 0 :(得分:8)
您可以使用
<link href="<%= Url.Content("~/Content/somecontent") %>" />
指向某个文件。使用相对位置(您的第一个示例)将无法一直工作,因为路由可以根据当前URL进行更改。在我的大多数项目中,我使用URL帮助程序来执行此类操作。
public static class ExtensionsOfUrlHelper
{
// TODO: Prepare for .NET 4.0, this will return MvcHtmlString
public static string Asset(this UrlHelper url, string asset)
{
var path = "~/assets/" + asset;
return string.Format("<link href=\"{0}\" />", url.Content(path));
}
}
这使视图更轻,我只需输入...
<%= Url.Asset("some_asset") %>
......并完成它。
当.NET 4.0发布并且您更新代码库时,您将更改静态以返回闪亮的新MvcHtmlString。这将很乐意防止和双重逃避。 (并且您希望在任何编写HTML的代码中执行此操作。)