2016-07-25 4 views
0

angeordnet ist, ich bin mit ViewRenderer Ansicht Ergebnis in eine Datei zu schreiben, wie so:Ist der Controller nach Viewrenderer mit

public class WriteViewToFile 
    { 
     private DetailsController controller = ViewRenderer.CreateController<DetailsController>(); 

     public void WriteDataToFile(ContextDB db, DataViewModel model, string fileName) 
     { 

      string html = ViewRenderer.RenderView("~/Views/Details/TemplateForData.cshtml", model, controller.ControllerContext); 

      File.WriteAllText(fileName, html); 
      // controller.dispose(); 
     } 
     public void WriteOtherToFile(ContextDB db, OtherViewModel model, string fileName) 
     { 

      string html = ViewRenderer.RenderView("~/Views/Details/TemplateForOther.cshtml", model, controller.ControllerContext); 

      File.WriteAllText(fileName, html); 
      // controller.dispose(); 
     } 
    } 

Soll ich controller.dispose() am Ende hinzufügen oder wird dies automatisch? Wenn ja, gibt es eine Möglichkeit, darüber zu verfügen, nachdem eine der Methoden aufgerufen wurde?

Antwort

0

Sie könnten dieses Verhalten in seine eigene Methode trennen:

public void WriteToFile(ContextDB db, DataViewModel model, string fileName) 
{ 
    string html = RenderView(model); 
    File.WriteAllText(fileName, html); 
} 

private string RenderView(model) 
{ 
    using(var controller = ViewRenderer.CreateController<DetailsController>()) 
    { 
     return ViewRenderer.RenderView("~/Views/Details/Template.cshtml", 
      model, controller.ControllerContext); 
    } 
} 

Jetzt Ihren Controller erstellt, verwendet wird, und dann entsorgt.

+0

Ich benutze es mit mehreren verschiedenen Modellen, jedes hat seine eigene Sicht. Ich werde meine Frage aktualisieren, um zu klären –

+0

In diesem Fall wäre der Pfad zu der Ansicht nur ein Parameter, der an RenderView übergeben wird. –

+0

die Modellklasse ist auch anders –

Verwandte Themen