我发现这个问题
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 + "/")); } } }
解决方法
您可以尝试在HtmlHelper上创建一个扩展来解决这个问题:
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="..." />
如果我错了,我没有尝试这样正确的代码.