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 回答