2014-02-20 27 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循环。

1

作为替代方案,我建议切换ViewData以使用视图模型,因为它们是强类型的。

您可以通过以下方式做到这一点:

创建一个视图模型

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

将当前ViewDataViewDataDictionary固定它:

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

使用viewbag而不是可视数据

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/

相关问题