已多次询问将视图渲染到字符串,但是我的问题有所不同。
有ViewEngineResult.View
一个方法叫做Render(ViewContext, TextWriter)
如果我传入包含我的电子邮件视图的控制器,我的代码可以正常工作,但是如果操作方法源自另一个控制器,那么我需要能够修改 ViewContext 以查看 EmailControllers 视图。
我无法确切地弄清楚该Render
方法使用什么属性来确定要查看的视图文件夹。本质上,我希望弄清楚这一点,以便我可以告诉它查看电子邮件视图文件夹。
这是我的代码供参考:
public static string RenderPartialViewToString(Controller controller, string viewName, object model)
{
var oldModel = controller.ViewData.Model;
controller.ViewData.Model = model;
try
{
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName,
null);
var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
controller.ViewData.Model = oldModel;
return sw.GetStringBuilder().ToString();
}
}
catch (Exception ex)
{
throw ex;
}
}
回顾一下,如果我在 Orders 控制器中传递在FindView
Orders 视图文件夹中查找我的视图,我需要告诉它在电子邮件视图文件夹中查找。