后端dll中的渲染视图

本文关键字:视图 dll 后端 | 更新日期: 2023-09-27 18:06:00

通常我用这个:

private byte[] GetInvoiceAsPdf(string id)
{
        var model = Utilities.GetModel(id);
        ViewData.Model = model;
        var view = ViewEngines.Engines.FindView(ControllerContext, "PDFLayout", null);
        byte[] pdfBuf;
        using (var writer = new StringWriter())
        {
            var context = new ViewContext(ControllerContext, view.View, ViewData, TempData, writer);
            view.View.Render(context, writer);
            writer.Flush();
            string content = writer.ToString();
            pdfBuf = Utilities.ConvertHtmlToPdf(content);
            if (pdfBuf == null)
                throw new Exception("Invalid pdfBuffer when creating the pdf file.");
        }
        return pdfBuf;
}

当我在控制器中这样做时效果很好。然而,现在我需要把它移动到一个DLL文件。我怎么能转换,并得到它的工作从内部的DLL文件?

问题是ControllerContextViewData/TempData。在上面,我直接设置了ViewData,因为我在控制器内部,并且我从控制器获得了上下文。

它仍然是一个MVC项目,只是逻辑被移动到一个DLL文件。

后端dll中的渲染视图

发表评论作为回答:

解决方案是将控制器和其他资源中所有必要的上下文信息作为参数传递给函数(或者简单地传递控制器的实例,如果它公开了所有必要的上下文),然后像往常一样在函数中使用它们。这样,函数将拥有完成其任务所需的所有信息。