Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用另一个控制器的操作并以字符串形式获取视图_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# 调用另一个控制器的操作并以字符串形式获取视图

C# 调用另一个控制器的操作并以字符串形式获取视图,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,是否可以调用另一个控制器的操作并以字符串形式接收其结果视图 我想使用.NETMVC的标准行为,它允许我根据适当的模型和视图创建电子邮件。我知道我可以使用RazorEngine,但在这个例子中,我必须传递一个完整的路径来查看,如果我想使用@Html或@Url,我应该覆盖基类。我在一些情况下通过将以下内容添加到我的基本控制器类中来实现这一点 protected string RenderViewToString(string viewName, object model = null) { Vi

是否可以调用另一个控制器的操作并以字符串形式接收其结果视图


我想使用.NETMVC的标准行为,它允许我根据适当的模型和视图创建电子邮件。我知道我可以使用RazorEngine,但在这个例子中,我必须传递一个完整的路径来查看,如果我想使用@Html或@Url,我应该覆盖基类。

我在一些情况下通过将以下内容添加到我的基本控制器类中来实现这一点

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();
  }
}

您想从
控制器
或业务层类调用它吗?在哪个上下文中使用,可以相当容易地获得视图的完整路径?如果您有HtmlHelper,直接的方法是调用@Html.Action。你看到了吗?是的,检查一下