将Razor页面渲染为html需要不同的模型

时间:2017-12-29 12:48:02

标签: asp.net-mvc razor

我使用此方法将视图呈现为html(这是生成pdf所必需的)。

public static class ControllerContextExtensions
{
    public static string RenderViewToHtml(this ControllerContext context, string viewName, object model)
    {
        context.Controller.ViewData.Model = model;
        using (StringWriter sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(context,
                                                            viewName);

            ViewContext viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw);
            viewResult.View.Render(viewContext, sw);

            string html = sw.GetStringBuilder().ToString();
            string baseUrl = string.Format("{0}://{1}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Authority);
            html = Regex.Replace(html, "<head>", string.Format("<head><base href=\"{0}\" />", baseUrl), RegexOptions.IgnoreCase);
            return html;
        }
    }

然而,当我在视图中更改模型时,它始终失败(在Render(viewContext, sw);处使用短语'它需要模型A,但传递的模型是类型B',即使部分视图已声明类型B的模型 注意:“ABC”部分视图中包含@model InvoiceReportModelItem picture one 作为一个实验,我已经传递了BaseReportViewModel后代类型的空模型。现在它说它需要我之前试过的类型模型。 enter image description here

问题的原因是什么?我试图重命名该文件(可能是字典缓存或其他东西,但它没有帮助)

1 个答案:

答案 0 :(得分:0)

所以问题不在这个视图中,而是在它的布局视图模型中有所不同......是的,'部分布局',我知道。

在我的案例中,视图包含InvoiceReportModelItem类型的模型及其布局 - BaseReportViewModel