将静态列表传递给视图MVC5

本文关键字:视图 MVC5 静态 列表 | 更新日期: 2023-09-27 18:20:40

我有一个静态类,它包含一个由每个模型填充的列表。我正在努力实现的是将每个模型都放在一个大列表中,然后按日期排序。然后将每个类按顺序显示在一个大表中(通过局部视图)。这里是静态类:

    public static class Inq_MasterList {
    public static List<Inq_DetailsBase> DetailsList = new List<Inq_DetailsBase>();

    public static List<Inq_DetailsBase> CombineModels() {

        DetailsList.Sort((x, y) =>
            x == null ? (y == null ? 0 : -1) : (y == null ? 1 : x.EventDate.CompareTo(y.EventDate))
        );
        return DetailsList;
    }
}

我有一个包含模型引用的"master"视图页,但我试图将这个特定的静态列表作为与模型不匹配的详细部分来传递(我希望这有意义)。因此,我通过调用DisplayFor来测试其中一个"细节"视图,如下所示:

@Html.DisplayFor(Inq_MasterList.DetailsList, "Inq_HotScaleDetail")

然而,现在我得到了一个错误:

无法根据用法推断方法"System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper,System.Linq.Expressions.Expression>,object)"的类型参数。请尝试显式指定类型参数。

如何将此列表显式传递给视图?还是我对这个"细节/细节"说错了?

当我强制转换它时,我得到一个空引用异常,即使我在列表中有项目:

@Html.DisplayFor((Inq_CompositeChain x) => Inq_MasterList.DetailsList, "Inq_HotScaleDetail")

将静态列表传递给视图MVC5

DisplayFor需要一个表达式作为其输入。它解析表达式以查找表达式引用的成员的任何相关元数据。

你可以试试

@Html.DisplayFor( () => Inq_MasterList.DetailsList, "Inq_HotScaleDetail")

但我不确定你能用这种方式使用字段。公共领域通常是不受欢迎的,所以公共财产或方法会更好。您可以保留一个私有字段,然后用一种方法返回:

private static List<Inq_DetailsBase> _DetailsList = new List<Inq_DetailsBase>();
public IEnumerable<Inq_DetailsBase> DetailsList {get {return _DetailsList;}}