2013-06-25 2 views
3

Я пытаюсь изменить этот код: http://www.codeproject.com/Articles/260470/PDF-reporting-using-ASP-NET-MVC3 Чтобы получить данные ViewBag для рендеринга View в PDF.RenderPartial и ViewBag

В принципе, мне нужно, чтобы перейти к Html.RenderPartial с новым контекстом моего ViewBag кода сейчас:

Html.RenderPartial(viewName, model); 

И я пытаюсь изменить его на что-то вроде:

Html.RenderPartial(viewName, model, new ViewDataDictionary(ViewBag)); 

У меня нет ошибок, но Словарь остается пустым.

BR

ответ

11

Попробуйте переходящим в ViewData собственности вместо ViewBag.

Html.RenderPartial(viewName, model, new ViewDataDictionary(ViewData)); 

ViewBag свойство является динамическим объектом, поэтому ViewDataDictionary конструктор вы вызываете это тот, который принимает object. Вам лучше использовать тот, который занимает уже заполненный ViewDataDictionary. Данные в ViewBag и ViewData одинаковы.

+0

Я могу заставить его работать, но я обнаружил, что я использовал переменную с именем «ViewBag». Я думаю, что это не может быть отличной идеей, поэтому я изменил ее для лучшего имени, и я делаю это изменение, и теперь отлично работает !, спасибо вы! – Santiago

+0

+ 1.Спасибо! Отлично. Я знаю о ViewData, но никогда не использовал его. Некоторое время задерживается эта проблема и большую часть времени использует для создания новой модели viewModel, чтобы избавиться от проблемы. – Tchaps

0

Вы можете использовать:

@Html.Partial(viewName) 

При частичном viewbag от основной точки зрения будут доступны.

Хорошо. Если вам необходимо оказать HTML с частичным видом на PDF-файл вы можете использовать этот код:

@{ 
    var htmlString = Html.Partial(viewName);  
    var pdfData = PdfComposerClass.CreatePdfStaticMethod(htmlString); 
} 
+0

Благодарим вас, но это не то, что мне нужно, это особый случай, в некоторых случаях мне нужно визуализировать представление в формате PDF, api для этого работает, но не получает данные ViewBag, я локализую его создайте новый контекст, проблема возникает в строке, которую я написал выше. – Santiago

+0

Посмотрите на обновленный ответ, возможно, это было полезно. – YD1m