【问题标题】:MVC Razor The model item passed into the dictionary is of type List String, but this dictionary requires IEnumerableMVC Razor 传入字典的模型项是List String类型,但是这个字典需要IEnumerable
【发布时间】:2013-10-22 09:44:45
【问题描述】:

型号:

public class TestModel
{
    [Column]
    public string Name { get; set; }
}

控制器:

TestModel[] metadata = context.GetTable<TestModel>().ToArray();


return View(itemsToShow.ToList());

名称列并按用户选择的字母顺序对其进行排序,效果很好(已在调试模式下对其进行测试 - 例如,如果用户选择“d”,它只会显示以“d”开头的项目。)

问题是当我在视图中添加“@model IEnumerable”和 foreach 循环时出现错误。

【问题讨论】:

  • 您的 items 集合的类型为 List&lt;string&gt;,而不是 List&lt;TestModel&gt;

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


【解决方案1】:

问题是您的视图期望模型的类型为IEnumerable&lt;TestModel&gt;,但您正在传递IList&lt;String&gt;,如错误消息所示。

看起来您不应该将 metadata 投影到控制器中的 IList&lt;String&gt; 并传递给视图,而是应该像过滤 metadata 一样

IEnumerable<TestModel> metadata = context.GetTable<TestModel>().ToArray();

var itemsToShow = string.IsNullOrEmpty (page) 
    ? metadata 
    : metadata.Where(x => x.Name.StartsWith(page, true, null));

ViewData["currentPage"] = page ?? string.Empty;

return View(itemsToShow.ToList());

【讨论】:

    【解决方案2】:

    为什么你在你的itemsToShow 上调用.ToList() ? (我认为这只是重复)

    List&lt;string&gt; items 更改为IEnumerable&lt;string&gt; items 并从最后一行删除.ToList()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 2017-03-15
      相关资源
      最近更新 更多