[英]Passing ViewData to Partial View
调节器
IEnumerable<AvgPosGAFields> _myList = helper.ConvertToListAvgPosGa(locDataSetGACampaigns.Tables[0]);
ViewData["hourlydata"] = _myList;
我想使用此ViewData传递给我的局部填充表我正在使用renderpartial呈现我的局部我。 如何传递此ViewData? 以及如何在它上使用foreach?
主视图:
Html.RenderPartial( "HourlyDetails",new ViewDataDictionary { { "hourlydata", 0 } } );
部分视图包含一个表,该表将由ViewData中的模型填充
作为替代方案,我建议将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
}
您可以在控制器中使用Html.Action()
:
public ActionResult RenderAction()
{
//....
IEnumerable<AvgPosGAFields> _myList = helper.ConvertToListAvgPosGa(locDataSetGACampaigns.Tables[0]);
return PartialView( _myList );
}
并从您想要的其他视图调用它:
@Html.Action("RenderAction", "Controller")
在RenderAction
视图中,使用foreach循环。
检查您是否以某种方式意外或部分故意覆盖了完整的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) } })
使用一个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/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.