我正在尝试在自定义路径中使用区域,而且我遇到了问题。我一直在搞砸一堆,但还没有找到解决方案。
我的项目是一个EPiServer CMS项目(我觉得不应该有任何影响,只是想提一下,以防万一)
我的结构是
我在global.asax.cs
中有这个protected void Application_Start()
{
ViewEngines.Engines.Add(new AreaTemplateViewEngineDynamic());
AreaRegistration.RegisterAllAreas();
...
}
我有一个自定义RazorEngine(可能刚刚添加了更多默认路径,但截至目前已有此解决方案)
public class AreaTemplateViewEngineDynamic : RazorViewEngine
{
public AreaTemplateViewEngineDynamic()
{
this.PartialViewLocationFormats = this.ViewLocationFormats = this.MasterLocationFormats =
new string[]
{
"~/CompanyName/Views/{1}/{0}.cshtml", "~/CompanyName/Views/Shared/{0}.cshtml"
};
this.AreaMasterLocationFormats = this.AreaPartialViewLocationFormats = this.AreaViewLocationFormats =
new string[]
{
"~/CompanyName/Areas/{2}/Views/{1}/{0}.cshtml", "~/CompanyName/Areas/{2}/Views/Shared/{0}.cshtml"
};
}
}
添加此区域注册
public class CmsAreaRegistration: AreaRegistration
{
public override string AreaName
{
get { return "Commerce"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Cms_default",
"Cms/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "Root.CompanyName.Areas.Cms.Controllers" }
);
}
}
当我尝试加载页面时,它似乎没有看到区域路径,只看到非区域路径。
未找到视图'index'或其主控,或者没有视图引擎支持搜索的位置。搜索了以下位置:
我希望它找到的路径是
如果我不得不使用
@{Html.RenderAction("MiniCart", "Cart", new { area = "Commerce"} );}
我希望它能够获得成就
答案 0 :(得分:1)
当您还应设置以下位置时,您只需设置AreaMasterLocation的位置:
在对象浏览器中查找以下类:VirtualPathProviderViewEngine以获取更多属性和方法。
答案 1 :(得分:0)
我编写了自己的RazorViewEngine,我在其中添加了一些自定义代码来查找路径。 可以使用URL,因为URL是由CMS控制的,因此URL不代表MVC路径。