2014-02-13 2 views
0

У меня есть метод, который конвертирует мой html в строку для экспорта в PDF только мне нужно преобразовать мой html (View) в строку, чтобы экспортировать в PDFКак мне передать значение моего ViewBag for View в mvc

Код:

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(); 
    } 

Но значение не будет смотреть мой ViewBag:

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

код Экспорт 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); 
     } 
    } 

Как сделать, чтобы получить значение из моего ViewBag в поле зрения?

ответ

1

Если вы знакомы с blob storage in Azure, вы можете подумать о ViewBag как о том же абстрактном типе хранилища данных.

Я предполагаю, что вы хотите вывести эти значения, чтобы они могли быть потреблены вашим View -> метод преобразования PDF, поэтому все, что вам нужно на Ваш взгляд:

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

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

, выводящий значения вы установили в контроллер как HTML.

Смежные вопросы