控制器
IEnumerable<AvgPosGAFields> _myList = helper.ConvertToListAvgPosGa(locDataSetGACampaigns.Tables[0]);
ViewData["hourlydata"] = _myList;
我想使用将此ViewData传递给我的部分填充表格我使用renderpartial来渲染我的部分我的。 我怎样才能传递这个ViewData?我怎么能用foreach呢?
主要观点:
Html.RenderPartial( "HourlyDetails",new ViewDataDictionary { { "hourlydata", 0 } } );
部分视图包含一个表,该表将由ViewData中的模型填充
答案 0 :(得分:2)
作为替代方案,我建议切换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 :(得分:0)
您可以在控制器中使用Html.Action()
:
public ActionResult RenderAction()
{
//....
IEnumerable<AvgPosGAFields> _myList = helper.ConvertToListAvgPosGa(locDataSetGACampaigns.Tables[0]);
return PartialView( _myList );
}
并从您想要的其他视图中调用它:
@Html.Action("RenderAction", "Controller")
在RenderAction
视图中,使用foreach循环。
答案 2 :(得分: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) } })
答案 3 :(得分: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/