我发现了这个问题Can't use relative paths with areas in ASP.NET MVC 2,这与我遇到的问题相同。在MVC3中是否仍然如此?
有没有办法将内容文件保留在相对于该区域的区域中?
这样区域中的布局文件可以具有以下内容
无需建立完全限定的链接,就需要区域目录和区域名称,或者需要解决上述问题的解决方案(需要对每个请求中的每个区域进行检查)。
更新/编辑
我决定同时使用上述问题和下面的解决方案(html帮助器),具体取决于项目/情况。我的上述实现使用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 + "/"));
}
}
}
最佳答案
您可以尝试在HTML帮助器上创建扩展程序以解决此问题:
public static string Image(this HtmlHelper html, string imagePath)
{
var area = html.ViewContext.RouteData.Values["area"];
if (!string.IsNullOrEmpty(area))
area = "Areas/" + area + "/";
return VirtualPathUtility.ToAbsolute("~/" + area + "Content/img/" + imagePath);
}
因此在您看来,您可以使用:
<img src="@Html.Image("myimage.png")" alt="..." />
我没有尝试代码,所以如果我错了,请更正我。