使用RazorPDF错误转换视图

时间:2016-07-06 20:15:18

标签: asp.net-mvc razorpdf

我构建了这种格式的链接:http://localhost:33333/Invoices/Reports?format=pdf

当我运行时显示此错误:

System.InvalidOperationException:传递到字典中的模型项的类型为'System.Data.Entity.Infrastructure.DbQuery dropped 11 [Webb.Models.Faktury,System.Int32,System.String,System。可为空的'dropped #dropzoneDiv' (e, template) => { e.preventDefault(); console.log(e.originalEvent.dataTransfer.files); // this will contain the list of files that were dropped } 1的System.DateTime],System.Nullable 1[<>f__AnonymousType9 1 [System.Int32],System.String,System.Nullable 1[System.DateTime],System.Nullable 1 [System.Single],System.Nullable 1[System.Single],System.Nullable 1 [Webb.Models.Faktury]”。

查看:

1[System.Single],System.Nullable

控制器:

1[System.Single]]]', but this dictionary requires a model item of type 'System.Collections.Generic.List

如何使用数据库中的数据将成功视图导出为pdf?

- 编辑1:

@model List<Webb.Models.Faktury>
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <h2>Html Report</h2>
    <p>
        Lorem ipsum dolor sit amet</p>
    <table width="100%">
        <tr>
            <td>User Name</td>
            <td>Description</td>
            <td>Lucky Number</td>
        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.FAK_Id</td>
                <td>................</td>
                <td>@item.FAK_Numer</td>
            </tr>
        }
    </table>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您的观点被强烈输入Faktury的集合。但是从你的action方法中你传递了一组匿名对象。

更改LINQ表达式代码以使用Faktury类进行投影。

var pro = (from a in db.Fakturies
                   join b in db.Wierszes on a.FAK_Id equals b.WIE_Fkid
                   join c in db.Produkties on b.WIE_Pid equals c.PRO_Id
                   select a);

pro = pro.Where(a => a.FAK_Id == 6);

 if (Request.QueryString["format"] == "pdf")
      return new PdfResult(pro.ToList(), "Reports");

return View(pro);

如果您需要传递比Fakturties列表更多的信息,您可以创建一个包含所需属性的视图模型。

public class PrintViewModel
{
  public IEnumerable<Faktury> Fakturies {set;get;}
  public IEnumerable<Wiersz> Wierszes {set;get;}  

  public PrintViewModel()
  {
    this.Fakturies = new List<Faktury>();
    this.Wierszes = new List<Wiersz>();
  }
}

并在您的操作方法中,创建一个此对象,分配属性值并发送到视图。

var vm=new PrintViewModel();
vm.Fakturies=pro;  //assuming pro is already loaded with the above code.
vm.Wierszes =db.Wierszes;
return View(vm);

现在确保您的视图强烈输入此新视图模型

@model PrintViewModel
<h3>Fatturies</h3>
@foreach(var f in Model.Fakturies)
{ 
  <p>@f.FAK_Numer</p>
}
<h3>Wierszes</h3>
@foreach(var f in Model.Wierszes)
{ 
  <p>@f.Name</p>
}