调用另一个控制器的动作并将视图作为字符串
Calling an action of another controller and getting view as a string
是否可以调用另一个控制器的操作并将其结果视图作为字符串接收?
我想使用 .net mvc 的标准行为,它允许我基于适当的模型和视图创建电子邮件消息。我知道我可以使用 RazorEngine 但在这种情况下我必须传递一个完整的路径来查看,如果我想使用例如我应该覆盖 base class 。 @Html 或@Url.
在几个案例中,我通过将以下内容添加到我的基本控制器来完成此操作 class。
protected string RenderViewToString(string viewName, object model = null)
{
ViewData.Model = model;
using(StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
protected string RenderPartialViewToString(string viewName, object model = null)
{
ViewData.Model = model;
using(StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
是否可以调用另一个控制器的操作并将其结果视图作为字符串接收?
我想使用 .net mvc 的标准行为,它允许我基于适当的模型和视图创建电子邮件消息。我知道我可以使用 RazorEngine 但在这种情况下我必须传递一个完整的路径来查看,如果我想使用例如我应该覆盖 base class 。 @Html 或@Url.
在几个案例中,我通过将以下内容添加到我的基本控制器来完成此操作 class。
protected string RenderViewToString(string viewName, object model = null)
{
ViewData.Model = model;
using(StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
protected string RenderPartialViewToString(string viewName, object model = null)
{
ViewData.Model = model;
using(StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}