MVC Razor 传递到字典中的模型项的类型为列表字符串,但此字典需要 IEnumerable

本文关键字:字典 字符串 列表 IEnumerable Razor MVC 模型 类型 | 更新日期: 2023-09-27 18:36:19

Model:

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

控制器:

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

return View(itemsToShow.ToList());

名称列,并根据用户选择的字母顺序对其进行排序,工作正常(已在调试模式下对其进行了测试 - 例如,如果用户选择"d",则只会显示以"d"开头的项目。

问题是当我在视图中添加"@model IEnumerable"和 foreach 循环时,我收到错误。

MVC Razor 传递到字典中的模型项的类型为列表字符串,但此字典需要 IEnumerable

问题是您的视图期望模型具有一种IEnumerable<TestModel>,但您正在传递IList<String>错误消息所示。

看起来您不应该将metadata投影到控制器中的IList<String>并传递到视图,而应该过滤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());

为什么你在itemsToShow上打电话给.ToList()?(我认为这只是重复)

List<string> items更改为IEnumerable<string> items并从最后一行中删除.ToList()