我使用此方法将视图呈现为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
作为一个实验,我已经传递了BaseReportViewModel后代类型的空模型。现在它说它需要我之前试过的类型模型。
问题的原因是什么?我试图重命名该文件(可能是字典缓存或其他东西,但它没有帮助)
答案 0 :(得分:0)
所以问题不在这个视图中,而是在它的布局视图模型中有所不同......是的,'部分布局',我知道。
在我的案例中,视图包含InvoiceReportModelItem
类型的模型及其布局 - BaseReportViewModel
。