将静态列表传递给视图MVC5

时间:2015-11-04 14:17:20

标签: c# asp.net-mvc

我有一个静态类,其中包含由每个模型填充的列表。我要实现的目标是将每个模型放在一个大的列表中,然后按日期排序。然后按顺序将每个类显示在一个大表中(通过部分视图)。继承静态类:

    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;
    }
}

我有一个包含模型引用的“主”视图页面,但我试图将这个特定的静态列表作为一个与模型不匹配的详细信息部分传递(我希望这是有意义的)。因此,我正在测试其中一个“详细信息”视图,并调用DisplayFor,如下所示:

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

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

  

无法从用法推断出方法'System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper,System.Linq.Expressions.Expression&gt;,object)'的类型参数。尝试明确指定类型参数。

如何将此列表显式传递给视图? 或者我是否认为这个“主人/细节”错了?

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

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

1 个答案:

答案 0 :(得分:0)

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;}}