2014-02-20 50 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/

相關問題