MVC Razor传递给字典的模型项是List String类型,但是这个字典需要IEnumerable

时间:2013-10-22 09:44:46

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

型号:

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

控制器:

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


return View(itemsToShow.ToList());

名称列,并按字母方式对用户选择进行排序,工作正常(在调试模式下测试过 - 例如,如果用户选择'd',它只会显示以'd'开头的项目。)

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

2 个答案:

答案 0 :(得分:1)

问题是您的视图期望模型的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());

答案 1 :(得分:0)

为什么要在.ToList()上致电itemsToShow? (我认为这只是一个重复)

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