在Orchard中使用FindView

Ric*_*ide 4 orchardcms

我正在尝试使用:

var viewEngineResult = ViewEngines.Engines.FindView(ControllerContext, myViewName, null);
Run Code Online (Sandbox Code Playgroud)

作为呈现视图内容以发送格式良好的电子邮件的过程的一部分.我在Orchard Controller里面使用它.我在MVC项目中使用了Orchard之外的类似代码,它工作正常.

但是在Orchard中运行此代码无法找到我正在查找的视图并返回已搜索0个位置的视图引擎结果.

viewEngineResult在调用后具有以下值:

  • SearchedLocations:Count = 0,
  • 查看:null,
  • ViewEngine:null

有没有理由这在Orchard中不起作用,有没有办法让它起作用?

Ric*_*ide 6

这个答案是基于Bertrand给我的建议,但我想把它与我发现的东西结合在一起.

为了能够使用FindPartialView,我需要将IViewEngineProvider的实例注入我的控制器.

然后我使用以下代码来解析和呈现视图:

private String RenderView(String viewName, object model)
{
    var paths = new List<string>(); // This can just be an empty list and it still finds it.
    var viewEngine = _viewEngineProvider.CreateModulesViewEngine(new CreateModulesViewEngineParams {VirtualPaths = paths});
    var viewResult = viewEngine.FindPartialView(ControllerContext, viewName, false);

    if (viewResult.View == null) {
        throw new Exception("Couldn't find view " + viewName);
    }

    var viewData = new ViewDataDictionary {Model = model};

    using (var sw = new StringWriter())
    {
        var viewContext = new ViewContext(ControllerContext, viewResult.View, viewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)