0

ViewRendererを使用して、次のようにビュー結果をファイルに書き込みます。

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

最後に controller.dispose() を追加する必要がありますか、それとも自動的に行われますか? はいの場合、いずれかのメソッドが呼び出された後にそれを破棄する方法はありますか?

4

1 に答える 1

0

その動作を独自のメソッドに分離できます。

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

これで、コントローラーが作成され、使用され、破棄されます。

于 2016-07-25T23:47:46.120 に答える