Problems filling fields in PDF in ASP.NET MVC

1

I'm having problems rendering some fields from my table in the PDF file. It was working fine, but I do not know what happened these fields are no longer rendering. On my My Courses screen, the student has a button that issues a Course Completion Statement , but when the student clicks the button and generates PDF fields come no data . Note: The data that render in the PDF is: Student Name , Enrollment , Course Name Period and Hours .

ViewPDF

@model MeuProjeto.Models.AlunoCurso @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <link href="~/Content/PDF.css" rel="stylesheet" type="text/css" /> <title>GeraPDF</title> </head> <body> <br/> <br/> <div id="declaracao"> <strong style="font-family: 'Times New Roman'">Declaração de Conclusão de Curso</strong> </div> <br/> <hr/> <text style="font-family: 'Times New Roman'; font-size: 20px"> Declaramos que o Sr(a). <b>@Html.DisplayFor(model => model.Aluno.Nome)</b>, matrícula de Nº <b>@Html.DisplayFor(model => model.Aluno.Matricula)</b>, inscrito no curso de <b>@Html.DisplayFor(model => model.Curso.Nome_Curso)</b>, na XXXXX, no período de <b>@Html.DisplayFor(model => model.Curso.Dt_Inicio)</b> a <b>@Html.DisplayFor(model => model.Curso.Dt_Fim)</b>, cumprindo uma carga horária de <b>@Html.DisplayFor(model => model.Curso.Carga_Horaria)</b>, com total comprometimento e dedicação todos os requisitos para a conclusão deste curso, estamos encaminhando esta via de Declaração para que seja emitido junta a XXXXXX, o <b>Certificado</b> de conclusão de Curso. </text> <hr/> <div id="assinatura"> _________________________ <span>em</span><span> ___/___/_____</span><br/> Assinatura do Responsável </div> </body> </html>

Action PDF

public ActionResult GerarPDF(int id)
    {
        var alunoCurso = db.AlunoCursos.FirstOrDefault(ac => ac.Aluno.Usuario == User.Identity.Name);
        if (alunoCurso != null)
        {
            AlunoCurso aluno =
                db.AlunoCursos.Include(a => a.Aluno).AsNoTracking().FirstOrDefault(al => al.AlunoId == id);

            var pdf = new ViewAsPdf
            {
                ViewName = "GeraPDF",
                FileName = "Declaração.pdf",
                Model = aluno,
                PageSize = Size.A4,
                PageMargins = new Margins {Bottom = 2, Left = 2, Right = 2, Top = 2}
            };

            return pdf;
        }

        return View();
    }

Excerpt from my View with the button that calls the PDF

@model IEnumerable<MeuProjeto.Models.AlunoCurso>

<!-- Aqui é BOTÃO onde chama a página do PDF -->

<div class="btn-group">
<div class="col-md-offset-2 col-md-10">
 @if (item.Aprovado == false)
  {
   <input type="submit" value="Pendente de Aprovação" name="meusCursos" class="cursos btn btn-primary btn-sm" disabled="disabled" data-id="@item.Id" />
  }
  else
  {
  <a href="~/AlunoCursos/[email protected]" class="btn btn-success btn-sm"><span class="glyphicon glyphicon-print"></span></a>
  }
  </div>
  </div>

@section Scripts {
            @Scripts.Render("~/bundles/jqueryval")
            <script>
                $(document).ready(function () {
                    $(".cursos").click(function () {
                        $.ajax({
                            type: "POST",
                            url: "MeusCursos/",
                            data: { id: $(this).data("id") },
                            success: function () {
                                $(this).attr("enable", "enable");
                            }
                        });
                    });
                });
            </script>
    
asked by anonymous 02.07.2015 / 22:16

2 answers

0

Get resolved as follows: In my Action I did not change anything

public ActionResult GerarPDF(int id)
    {
        //Aqui eu pego o usuário logado
        var alunoCurso = db.AlunoCursos.FirstOrDefault(ac => ac.Aluno.Usuario == User.Identity.Name);
        if (alunoCurso != null)
        {
            //Aqui eu faço o include do aluno e pego o AlunoID
            AlunoCurso aluno =
                db.AlunoCursos.Include(a => a.Aluno).AsNoTracking().FirstOrDefault(al => al.AlunoId == id);

            var pdf = new ViewAsPdf
            {
                ViewName = "GeraPDF",
                FileName = "Declaração.pdf",
                Model = aluno,
                PageSize = Size.A4,
                PageMargins = new Margins {Bottom = 2, Left = 2, Right = 2, Top = 2}
            };

            return pdf;
        }

        return View();
    }

Here the button code that calls Action PDF

<div class="btn-group">
  <div class="col-md-offset-2 col-md-10">
   @if (item.Aprovado == false)
    {
      <input type="submit" value="Pendente de Aprovação" name="meusCursos" class="cursos btn btn-primary btn-sm" disabled="disabled" data-id="@item.Id" />
              }
              else
              {
                              <!-- Aqui nessa linha que DEVE SER FEITA A ALTERAÇÃO -->
               <a href="~/AlunoCursos/[email protected]" class="btn btn-success btn-sm">Emitir Declaração</a>
              }
              </div>

The change must be made in the @ item.Id , as you needed to get the student ID the correct one is to pass the StudentId .

<div class="btn-group">
    <div class="col-md-offset-2 col-md-10">
     @if (item.Aprovado == false)
     {
      <input type="submit" value="Pendente de Aprovação" name="meusCursos" class="cursos btn btn-primary btn-sm" disabled="disabled" data-id="@item.Id" />
              }
              else
              {
                 <!-- Só trocar o @item.Id por @item.AlunoId -->
               <a href="~/AlunoCursos/[email protected]" class="btn btn-success btn-sm">Emitir Declaração</a>
              }
              </div>

This will fill the fields in the PDF.

    
03.07.2015 / 19:38
0

I'm not sure if this is it, but do not use @Html.DisplayFor() with the Rotating. Rotary is a bizarre and troublesome package. Change by the direct mention of the variable, as below:

<text style="font-family: 'Times New Roman'; font-size: 20px">
    Declaramos que o Sr(a). <b>@Model.Aluno.Nome</b>, matrícula de Nº <b>@Model.Aluno.Matricula</b>,
    inscrito no curso de <b>@Model.Curso.Nome_Curso</b>, na XXXXX,
    no período de <b>@Model.Curso.Dt_Inicio</b> a <b>@Model.Curso.Dt_Fim</b>,
    cumprindo uma carga horária de <b>@Model.Curso.Carga_Horaria</b>, com total comprometimento e dedicação todos os requisitos para a conclusão deste curso,
    estamos encaminhando esta via de Declaração para que seja emitido junta a XXXXXX, o
    <b>Certificado</b> de conclusão de Curso.
</text>

EDIT

I think you're using the wrong key to select. Modify the code below:

AlunoCurso aluno =
            db.AlunoCursos.Include(a => a.Aluno).AsNoTracking().FirstOrDefault(al => al.AlunoId == id);

To:

var alunoCurso =
            db.AlunoCursos.Include(a => a.Aluno).FirstOrDefault(ac => ac.AlunoCursoId == id);
    
03.07.2015 / 16:21