【问题标题】:The model item passed into the dictionary is of type 'System.Tuple`?传入字典的模型项是“System.Tuple”类型的?
【发布时间】:2013-05-14 09:51:02
【问题描述】:

在我看来,这里正在实现 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:我已经回答了这个问题(编辑)

【问题讨论】:

  • 你当然可以(应该)为这个场合写一个特殊的(视图)模型......

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


【解决方案1】:

变化:

@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,但您在 Controll Action (Index) 的 return 语句中向下传递了 List。如果您想防止集合在您的视图中被修改,您还可以选择传递IEnumerable

【讨论】:

    【解决方案2】:

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

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

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

    但就像@henk-holterman 所说,您可能应该制作一个特定的视图模型。

    【讨论】:

      【解决方案3】:

      我的编辑答案是@model Tuple&lt;List&lt;MvcApplication1.Models.EventRepository&gt;, List&lt;MvcApplication1.Models.SlideShow&gt;&gt;

      由于我们要返回包含两个对象集合作为元组的视图,因此我们必须在部分视图中定义这两个模型

      【讨论】:

        猜你喜欢
        • 2020-09-08
        • 1970-01-01
        • 2022-01-16
        • 2015-09-19
        • 1970-01-01
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 2019-06-01
        相关资源
        最近更新 更多