0
我有一个MVC4应用程序,目前使用一个区域(除了正常的位置)。通常情况下,我的路由一切正常,但我现在需要在“根”位置的代码来查找位于该区域内的局部视图。指定区域搜索视图
我的解决方案的文件中的相关部分:
/Areas
/Areas/Admin
/Areas/Admin/Views
/Areas/Admin/Views/Shared/_adminPartialView.cshtml
/Views
/Views/Shared/_rootPartialView.cshtml
而我失败的代码是:
var viewEngine = new RazorViewEngine();
var cContext = new ControllerContext(context, new RouteData(), new EmptyController());
// this works:
var rootView = viewEngine.FindPartialView(cContext, "_rootPartialView", false);
if (rootView == null) { throw new Exception("Root view not found"); }
// this throws my error:
var adminView = viewEngine.FindPartialView(cContext, "_adminPartialView", false);
if (adminView == null) { throw new Exception("Admin view not found"); }
(context
以上从HttpContext.Current间接上市)
.. 。这是有道理的,没有一个区域指定管理区域不应该被搜查......但是当我将上面的viewEngine
更改为= new AdminRazorViewEngine();
,其定义如下:
public class AdminRazorViewEngine : RazorViewEngine {
public AdminRazorViewEngine() {
var viewLocations = new [] {
"~/Areas/Admin/Views/{1}/{0}.cshtml",
"~/Areas/Admin/Views/Shared/{0}.cshtml"
};
base.ViewLocationFormats = viewLocations.Concat(base.ViewLocationFormats).ToArray();
}
}
我仍然得到相同的结果。
如果我将_adminPartialView.cshtml
复制到/Views/Shared/
那么使用任一视图引擎都可以正确找到两个视图。
我也尝试创建一个实际的RouteData对象,指定它的面积,并使用该构建我的ControllerContext时:
var routeData = new RouteData();
routeDate.Values.Add("area", "Admin");
// ...
var cContext = new ControllerContext(context, routeData, new EmptyController());
随着行为没有变化。
如何显式指定视图引擎的区域进行搜索?
D'哦。我正在寻找部分视图,但不添加到PartialViewLocationFormats – DaveD