2017-12-05 2 views
0

내가 PDF에 WebGrid를 내보내려고 노력하고 있어요에 나는이 내 컨트롤러에 다음 코드 : 코드는이 라인에서 나에게 오류를주고있다ASP.Net MVC 내보내기 WebGrid PDF

public FileStreamResult CreatePdf() 
{ 
    List<CertificationListViewModel> all = new List<CertificationListViewModel>(); 

    using (DBEntities db = new DBEntities()) 
    { 
     all = db.Certifications.ToList(); 
    } 

    WebGrid grid = new WebGrid(source: all, canPage: false, canSort: false); 

    string gridHtml = grid.GetHtml(
     columns: grid.Columns(
      grid.Column("Name", "Nome"), 
      grid.Column("Classification", "Classificação"), 
      grid.Column("Date", "Data de Realização") 
     ) 
    ).ToString(); 
    string exportData = String.Format("<html><head>{0}</head><body>{1}</body></html>", "<style>table{ border-spacing: 10px; border-collapse: separate; }</style>", gridHtml); 
    var bytes = System.Text.Encoding.UTF8.GetBytes(exportData); 
    using (var input = new MemoryStream(bytes)) 
    { 
     var output = new MemoryStream(); 
     var document = new iTextSharp.text.Document(PageSize.A4, 50, 50, 50, 50); 
     var writer = PdfWriter.GetInstance(document, output); 
     writer.CloseStream = false; 
     document.Open(); 

     var xmlWorker = iTextSharp.tool.xml.XMLWorkerHelper.GetInstance(); 
     xmlWorker.ParseXHtml(writer, document, input, System.Text.Encoding.UTF8); 
     document.Close(); 
     output.Position = 0; 
     return new FileStreamResult(output, "application/pdf"); 
    } 
} 

:

나는 오류가 누군가가 ideia이 있다면 무엇인지 확실하지 않다

Cannot implicitly convert type 'System.Collections.Generic.List<HIQTraining.Model.Certification>' to 'System.Collections.Generic.List<HIQTrainingSite.ViewModel.CertificationListViewModel>'

:

all = db.Certifications.ToList(); 

이 가 나타 오류입니다 내가 할 수있는 것이 무엇인지 고맙게 생각합니다!

P.S :

using iTextSharp.text; 
using iTextSharp.text.pdf; 
+0

메시지를 자기 설명이다 -'all'입니다 'List '하지만 쿼리는'List '('CertificatesListViewModel' 컬렉션이 아닙니다)를 반환합니다 - 뷰 모델에 쿼리를 투영 (또는'all'의 정의를 변경)해야합니다 –

+0

일반 'List '만이'CertificationListViewModel' 타입을 받아 들일 것이고리스트는'List Kitson88

답변

0

오류가 당신의 가치는 다른 종류의 것을 당신을 말하고있다 : 내가 프로젝트에서 내 보낸 다음 iTextSharp 라이브러리를 가지고있다. (어느 의미가 있겠지만, 나는 "뷰"모델이 데이터베이스에 저장되는 것을 기대하지 않을 것입니다.) 그래서 당신은 어떤 식 으로든 하나에서 다른 것으로 변환 할 필요가 있습니다. 보기 모델이 단순히 객체 이니셜로 구축 할 수있는 경우

예를 들어, 당신은 .Select() 프로젝션을 구성 할 수 있습니다 : 많은 속성이있는 경우, AutoMapper 같은 라이브러리가 함께

all = db.Certifications.ToList() 
     .Select(c => new CertificationListViewModel { 
      SomeProperty = c.SomeProperty, 
      AnotherProperty = c.AnotherProperty 
     }); 

도움이 될 수 있습니다 . 당신이 실제로 에게 데이터베이스 모델의 목록을 원한다면

반대로, 만약 당신이 일치하도록 변수의 유형을 변경해야 할 것 :

List<Certification> all = new List<Certification>(); 
+0

새로운 것을했습니다 : DBEntities db = new DBEntities(); 모두 나열 = 새 목록(); 모두 = db.Certifications.ToList(); 그리고이 오류가 발생합니다 : 'System.Collections.Generic.List '형식을 'iTextSharp.text.List'로 암시 적으로 변환 할 수 없습니다. –

+0

@PaljiloDomijilo : 예, 그 오류는 같습니다. 그리고 같은 이유로. 완전히 다른 유형간에 암묵적으로 변환 할 수는 없습니다. 어떤 타입의 변수를 * all * 변수로 사용 하시겠습니까? – David