Wie bekomme ich in MVC3 Razor den HTML-Code einer gerenderten Ansicht in eine Aktion?

Weiß jemand, wie man den generierten HTML-Code einer Ansicht in eine Aktion bringt?

Ist es etwa so:

public ActionResult Do() { var html = RenderView("hello", model); ... } 

Ich benutze eine statische Methode in einer class namens Utilities.Common Ich übergebe Ansichten als Eigenschaften von JSON-Objekten ständig an den Client, so dass ich sie in eine Zeichenfolge rendern musste. Hier gehts:

 public static string RenderPartialViewToString(Controller controller, string viewName, object model) { controller.ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw); viewResult.View.Render(viewContext, sw); return sw.ToString(); } } 

Dies funktioniert sowohl für ViewEngines.Engines.FindPartialView für ViewEngines.Engines.FindView . Ändern ViewEngines.Engines.FindPartialView einfach ViewEngines.Engines.FindPartialView in ViewEngines.Engines.FindView .

Die angenommene Antwort von @Chev oben ist gut, aber ich wollte das Ergebnis einer bestimmten Aktion darstellen , nicht nur eine bestimmte Ansicht .

Außerdem musste ich in der Lage sein, Parameter an diese Aktion zu übergeben, anstatt mich auf die Injektion eines Modells zu verlassen.

Also habe ich meine eigene Methode entwickelt, die ich in die Basisklasse meiner Controller einfüge (sie allen zur Verfügung stellen):

  protected string RenderViewResultAsString(ViewResult viewResult) { using (var stringWriter = new StringWriter()) { this.RenderViewResult(viewResult, stringWriter); return stringWriter.ToString(); } } protected void RenderViewResult(ViewResult viewResult, TextWriter textWriter) { var viewEngineResult = this.ViewEngineCollection.FindView( this.ControllerContext, viewResult.ViewName, viewResult.MasterName); var view = viewEngineResult.View; try { var viewContext = new ViewContext( this.ControllerContext, view, this.ViewData, this.TempData, textWriter); view.Render(viewContext, textWriter); } finally { viewEngineResult.ViewEngine.ReleaseView(this.ControllerContext, view); } } 

Angenommen, ich habe eine Aktion namens Foo , die ein Modellobjekt und einige andere Parameter verwendet, die zusammen beeinflussen, welche Ansicht verwendet wird:

  public ViewResult Foo(MyModel model, int bar) { if (bar == 1) return this.View("Bar1"); else return this.View("Bar2", model); } 

Nun, wenn ich das Ergebnis der Aktion Foo aufrufen möchte, kann ich einfach ViewResult indem ich die Foo Methode aufruft, und dann RenderViewResultAsString , um den HTML-Text zu erhalten:

  var viewResult = this.Foo(model, bar); var html = this.RenderViewResultAsString(viewResult);