默认情况下,从网址/folderlevel1/folderlevel2/Site.master
访问的.NET domain.com/urllevel1/urllevel2/
中放置的.NET MVC2中的母版页将解析此标记中的网址:
<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
到
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
这在我的多租户MVC应用中变得有问题。我想阻止这种行为。我希望母版页单独留下网址。
答案 0 :(得分:5)
您可能遇到此问题,因为当您将head
标记指定为服务器端控件时,ASP.NET会执行魔术操作:
<head runat="server">
这些技巧包括:
如果您不想要这些技巧,只需从runat
标记中删除head
属性:
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<!DOCTYPE html>
<html>
<head>
<link href="Content/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
...
</body>
</html>
答案 1 :(得分:1)
你可以使用
<link href="<%=Url.Content("~/Content/Site.css")%>" rel="stylesheet" type="text/css" />
但这基本上总是转化为:
<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
所以你不妨使用后者。
答案 2 :(得分:1)
就像Kazi的最佳实践条目(http://weblogs.asp.net/rashid/archive/2009/04/03/asp-net-mvc-best-practices-part-2.aspx)中提到的那样,忽略路由访问资源时。要做到这一点,它非常简单,效果很好。将以下内容添加到Global.asax
中的AddRoutes函数中_routes.IgnoreRoute("assets/{*pathInfo}");
...其中“assets /”是您的内容文件夹(默认情况下是“内容”)
答案 3 :(得分:0)
的奥斯卡,
我确信会有很多类似的答案可以遵循,但标准方法是:
<link href="<%=Url.Content("~/Content/Site.css")%>" rel="stylesheet" type="text/css" />
我当然可能错过了一些微妙的东西:)
答案 4 :(得分:0)
我建议使用HtmlHelper
的扩展方法为您处理此任务。
using System.Web;
using System.Web.Mvc;
namespace MyApplicationNamepsace.Views
{
public static class HtmlExtensions
{
public static IHtmlString RelativeCssLink(this HtmlHelper helper, string fileNameAndRelativePath)
{
TagBuilder builder = new TagBuilder("link");
builder.Attributes.Add("rel", "stylesheet");
builder.Attributes.Add("type", "text/css");
builder.Attributes.Add("href", fileNameAndRelativePath);
IHtmlString output = new HtmlString(builder.ToString());
return output;
}
}
}
然后确保将名称空间添加到views文件夹中的web.config文件中。
<system.web>
<pages>
<namespaces>
<add namespace="MyApplicationNamespace.Views"/>
</namespaces>
</pages>
</system.web>
然后在您的母版页中使用它。
<head runat="server">
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
<%: Html.RelativeCssLink("Content/Site.css") %>
</head>