传入字典的模型项是'System.Tuple`类型?

时间:2013-05-14 09:51:03

标签: c# .net asp.net-mvc asp.net-mvc-4 razor

这里实现了Tuple在我的视图中使用两个模型。但是我收到了以下错误

The model item passed into the dictionary is of type 
'System.Tuple`2[System.Collections.Generic.List`1[MvcApplication1.Models.EventRepository],System.Collections.Generic.List`1[MvcApplication1.Models.SlideShow]]', 
but this dictionary requires a model item of type 
'System.Tuple`2[System.Collections.Generic.IEnumerable`1[MvcApplication1.Models.EventRepository],System.Collections.Generic.IEnumerable`1[MvcApplication1.Models.SlideShow]]'.

这是我的查看

@model Tuple<IEnumerable<MvcApplication1.Models.EventRepository>, IEnumerable<MvcApplication1.Models.SlideShow>>
    ViewBag.Title = "Home Page";
}

控制器:

[HttpPost]
public ActionResult Index(string SearchParam)
{
EventRepository objcheckout = new EventRepository();
objcheckout.GetEventDetails(SearchParam);
SlideShow SS = new SlideShow();
SS.GetSlideDetail(SearchParam);
return View(Tuple.Create(objcheckout.GetEventDetails(SearchParam), SS.GetSlideDetail(SearchParam)));
}

有什么建议吗?

修改 这里我在视图中调用两个部分视图并收到此错误

 The model item passed into the dictionary is of type 
'System.Tuple`2[System.Collections.Generic.List`1[MvcApplication1.Models.EventRepository],System.Collections.Generic.List`1[MvcApplication1.Models.SlideShow]]', 
but this dictionary requires a model item of type 
'System.Collections.Generic.List`1[MvcApplication1.Models.EventRepository]'.

这是我的视图

  @model Tuple<IEnumerable<MvcApplication1.Models.EventRepository>, IEnumerable<MvcApplication1.Models.SlideShow>>
       @Html.Partial("EventDetails")
       @Html.Partial("SlideShow")

部分视图1

@model List<MvcApplication1.Models.EventRepository>

部分视图2

@model List<MvcApplication1.Models.SlideShow>

Answer:我已回答了这个问题(编辑)

3 个答案:

答案 0 :(得分:4)

变化:

@model Tuple<IEnumerable<MvcApplication1.Models.EventRepository>, IEnumerable<MvcApplication1.Models.SlideShow>>
    ViewBag.Title = "Home Page";
}

@model Tuple<List<MvcApplication1.Models.EventRepository>, IEnumerable<MvcApplication1.Models.SlideShow>>
    ViewBag.Title = "Home Page";
}

您将模型定义为IEnumerable,但您在控制操作(索引)中的List语句中传递了return。如果您希望在视图中修改集合,也可以选择传递IEnumerable

答案 1 :(得分:1)

对于新错误,您可以将元组的特定部分传递给每个部分:

@Html.Partial("EventDetails", Model.Item1)

@Html.Partial("SlideShow", Model.Item2)

但是像@ henk-holterman所说,你应该制作一个特定的视图模型。

答案 2 :(得分:1)

我的编辑答案为@model Tuple<List<MvcApplication1.Models.EventRepository>, List<MvcApplication1.Models.SlideShow>>

由于我们将两个对象集合作为元组返回视图,我们必须在部分视图中定义两个模型