0

I have a method which convert my html in a string for export to PDF only I need convert my html (View) to a string in order to export to PDF

Code:

 public string RenderViewToString(Controller controller, string viewName, object viewData)
    {
        var renderedView = new StringBuilder();
        using (var responseWriter = new StringWriter(renderedView))
        {
            var fakeResponse = new HttpResponse(responseWriter);
            var fakeContext = new HttpContext(HttpContext.Current.Request, fakeResponse);
            var fakeControllerContext = new ControllerContext(new HttpContextWrapper(fakeContext), controller.ControllerContext.RouteData, controller.ControllerContext.Controller);

            var oldContext = HttpContext.Current;
            HttpContext.Current = fakeContext;

            using (var viewPage = new ViewPage())
            {
                var html = new HtmlHelper(CreateViewContext(responseWriter, fakeControllerContext), viewPage);

                html.RenderPartial(viewName, viewData);
                HttpContext.Current = oldContext;
            }
        }

        return renderedView.ToString();
    }

But the value is not going to view my ViewBag:

   ViewBag.Email = usuario.strUsuarioEmail;
   ViewBag.Nome = usuario.strUsuarioNome;

Code Export PDF:

      public ActionResult EventoVisualizarPDF()
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(ConfigurationManager.AppSettings["UrlAPI"]);
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var id = Session["intCodigoGrupoUsuario"];
        var intUsuarioId = Session["intUsuarioId"];
        string url = "";

        url = "api/usuario/GetBuscaUsuario/" + intUsuarioId;

        HttpResponseMessage resposta = client.GetAsync(url).Result;
        if (resposta.IsSuccessStatusCode)
        {
            var usuario = resposta.Content.ReadAsAsync<Usuario>().Result;
            ViewBag.Email = usuario.strUsuarioEmail;
            ViewBag.Nome = usuario.strUsuarioNome;
        }

        url = "api/evento/GetEventoByUsuario/" + id;

        HttpResponseMessage response = client.GetAsync(url).Result;

        if (response.IsSuccessStatusCode)
        {
            var eventos = response.Content.ReadAsAsync<IEnumerable<Evento>>().Result;

            return this.ViewPdf("Customer report", "RelatorioEventoPDF", eventos.OrderBy(m => m.strEventoCodigo));

        }
        else
        {
            string msg = response.IsSuccessStatusCode.ToString();
            throw new Exception(msg);
        }
    }

how do to retrieve the value from my ViewBag in view?

Danielle
  • 139
  • 2
  • 4
  • 19

1 Answers1

1

If you're familiar with blob storage in Azure, you can think of the ViewBag as the same abstract type of data store.

I'm assuming that you want to output these values so they can be consumed by your View -> PDF conversion method, so all you need on your view is :

<label id="vbEmail">@ViewBag.Email</label>

<label id="vbNome">@ViewBag.Nome</label>

That will output the values you've set in the controller as HTML.

X3074861X
  • 3,709
  • 5
  • 32
  • 45