2014-02-20 3 views
1

КонтроллеруПереходя ViewData к частичному виду

IEnumerable<AvgPosGAFields> _myList = helper.ConvertToListAvgPosGa(locDataSetGACampaigns.Tables[0]);   
ViewData["hourlydata"] = _myList; 

я хочу использовать передать эту ViewData на мой парциальный заполнить таблицу, я использую renderpartial, чтобы сделать мой частичным моим. Как я могу передать это ViewData? и как я могу использовать foreach на нем ??

Главная Вид:

Html.RenderPartial("HourlyDetails",new ViewDataDictionary { { "hourlydata", 0 } }); 

Частичный вид содержит таблицу, которая должна быть заполнена моделью в ViewData

ответ

0

Вы можете использовать Html.Action() в контроллере:

public ActionResult RenderAction() 
{ 
    //.... 
    IEnumerable<AvgPosGAFields> _myList = helper.ConvertToListAvgPosGa(locDataSetGACampaigns.Tables[0]);   

    return PartialView(_myList); 
} 

И называют его с другого вида вы хотите:

@Html.Action("RenderAction", "Controller") 

И в RenderAction вид, используйте foreach loop.

1

В качестве альтернативы я бы рекомендовал переключить ViewData, чтобы использовать View Models, поскольку они строго типизированы вместо этого.

Вы можете сделать это следующим образом:

Создание вида модели

public class AViewModel 
{ 
    public IEnumerable<AvgPosGAFields> HourlyData { get; set; } 
} 

Контроллер

var model = new AViewModel(); 
model.HourlyData = helper.ConvertToListAvgPosGa(locDataSetGACampaigns.Tables[0]); 

return View(model); 

выше предполагает, что ваш метод возвращает IEnumerable<AvgPosGAFields>.

Просмотр

Добавить ссылку модели в верхней затем передать модель в ваш парциальное следующим образом:

@model AViewModel 
... 
@Html.Partial("HourlyDetails", Model.HourlyData) 

Частичный вид

также добавить ссылку на модель в вверху частичного просмотра, т.е.

@model IEnumerable<AvgPosGAFields> 

Это означает, что вы будете в состоянии цикла ваша модель в парциальное следующим образом:

@foreach(var avgPosGAField in Model) 
{ 
      @avgPosGAField.FooProperty 
} 
+1

Да. Передача элементов коллекции в частичные представления является сильным признаком того, что пришло время использовать модель представления с строго типизированными частицами. – Jakotheshadows

0

Проверьте, если вы как-то случайно или частично с целью переписать полную ViewData, моя проблема была перезаписана в ViewData для шаблонам, без реализация остальной части ViewData исчезла.

@Html.Partial("_EmployeeFormContent", @Model.Employee, new ViewDataDictionary() { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = nameof(Model.Employee) } }) 

Добавление текущей ViewData к новому ViewDataDictionary зафиксировал его:

@Html.Partial("_EmployeeFormContent", @Model.Employee, new ViewDataDictionary(ViewData) { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = nameof(Model.Employee) } }) 
0

Используйте viewbag вместо ViewData

IEnumerable<AvgPosGAFields> _myList = helper.ConvertToListAvgPosGa(locDataSetGACampaigns.Tables[0]); 
ViewData["hourlydata"] = _myList; 

поэтому попробуйте

ViewBag.hourlydata = _myList; 

, то даже если он не работает, попробуйте это решение
http://www.codenoevil.com/pass-additional-viewdata-asp-net-mvc-4/

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