在ASP.NET MVC中处理内容URL的最恰当和最简单的方法是什么?

时间:2009-12-11 11:21:11

标签: asp.net-mvc

首先我们有以下表格:

<link href="../../../content/somecontent" />

这很烦人(需要逐个计算路径深度)并且最容易出错。有人想出了这个:

<link runat="server" href="~/content/somecontent" />

这更容易,但我不知道我可以随意使用该解决方案。可以在任何地方使用吗?它适用于Spark吗?它如何影响渲染速度?最后也是最差的度假胜地是:

<link href="/content/somecontent" />

这不允许Web应用程序驻留在我不喜欢的子目录中,尤其是出于测试目的。还有其他更好的方式我不知道吗?

1 个答案:

答案 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的代码中执行此操作。)