我正在尝试使用:
var viewEngineResult = ViewEngines.Engines.FindView(ControllerContext, myViewName, null);
Run Code Online (Sandbox Code Playgroud)
作为呈现视图内容以发送格式良好的电子邮件的过程的一部分.我在Orchard Controller里面使用它.我在MVC项目中使用了Orchard之外的类似代码,它工作正常.
但是在Orchard中运行此代码无法找到我正在查找的视图并返回已搜索0个位置的视图引擎结果.
viewEngineResult在调用后具有以下值:
有没有理由这在Orchard中不起作用,有没有办法让它起作用?
这个答案是基于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)
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |