我发现了这个问题 Can't use relative paths with areas in ASP.NET MVC 2这与我遇到的问题相同。在 MVC3 中仍然是这种情况吗?
有没有办法将内容文件保存在相对于该区域的区域中?
这样一个区域中的布局文件可以有类似的东西
无需建立完全限定的链接,需要区域目录和区域名称或上述问题的解决方案,即需要在每个请求上检查每个区域。
更新/编辑
我决定同时使用上述问题中的解决方案和下面的解决方案(html helper) - 取决于项目/情况。我的上述实现使用 app.setting 来存储区域名称和扩展名,以便我可以将模块作为我的库的一部分。
var context = HttpContext.Current;
var path = context.Request.Path;
var list = ... //code that gets from app.config and then saves it
var extensions = ... // to the cache as non-removable with a dependency on web.config
foreach (var area in list)
{
if (!path.Contains(area + "/")) continue;
foreach (var extension in extensions)
{
if (path.EndsWith("." + extension))
{
context.RewritePath(path.Replace(area + "/", "Areas/" + area + "/"));
}
}
}
最佳答案
我个人喜欢扩展方法路由,基于我想出的第一个答案并测试它是否有效......而不是使用 @Url.Content
, 使用 @Url.ContentArea
并且不需要输入'~/'、'/'或'../'等。
助手会进行一些检查以自动删除这些,所以就像这样使用......
@Url.ContentArea("Content/style.css") or @Url.ContentArea("Images/someimage.png") :)
当您创建此 Url Helper Extension 时,您的选择,但我在 Web 的根目录下创建了一个“Helpers”文件夹,然后我包含
@using YourWebNameSpace.Helpers;
在我的_Layout.cshtml
( Razor /母版页)在我所在的任何“区域”中。您仍然可以使用
@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>
关于asp.net-mvc - MVC3 区域中的相对内容路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5130226/