Мне лично нравится маршрут метода расширения, основываясь на первом ответе, который я придумал, и проверил, что он работает ... Вместо использования @Url.Content
используйте @Url.ContentArea
и не нужно вводить '~ /' , '/' или '../' и т. д.
Помощник делает некоторые проверки, чтобы автоматически удалить их, так что просто используйте как это ...
@Url.ContentArea("Content/style.css") or @Url.ContentArea("Images/someimage.png") :)
Когда вы создаете это расширение Url Helper, по вашему выбору, но я создал папку «Помощники» из корня сети, тогда я включаю @using YourWebNameSpace.Helpers;
в мою _Layout.cshtml
(razor / masterpage) в любую «область» Я нахожусь.
Вы по-прежнему можете использовать @Url.Content
для ссылок за пределами текущей области (в основном вы можете смешивать в зависимости от необходимого ресурса и его местоположения).
namespace YourWebNamespace.Helpers
{
public static class UrlHelperExtensions
{
public static string ContentArea(this UrlHelper url, string path)
{
var area = url.RequestContext.RouteData.DataTokens["area"];
if (area != null)
{
if (!string.IsNullOrEmpty(area.ToString()))
area = "Areas/" + area;
// Simple checks for '~/' and '/' at the
// beginning of the path.
if (path.StartsWith("~/"))
path = path.Remove(0, 2);
if (path.StartsWith("/"))
path = path.Remove(0, 1);
path = path.Replace("../", string.Empty);
return VirtualPathUtility.ToAbsolute("~/" + area + "/" + path);
}
return string.Empty;
}
}
}
на главной странице или на любой странице (Razor только для этого примера) ...
@using YourWebNamespace.Helpers
<html lang="en">
<head>
<link href="@Url.ContentArea("Content/reset.css")" media="screen" rel="stylesheet" type="text/css" />
<link href="@Url.ContentArea("Content/style.css")" media="screen" rel="stylesheet" type="text/css" />
</head>
<body>