部分视图中的动态模型在转换为列表后不包含“FirstOrDefault”的定义

时间:2015-03-27 20:37:03

标签: asp.net-mvc dynamic

我尝试使用动态模型创建局部视图,但在将模型转换为List

后出现以下异常

部分视图:

@model dynamic
@{
    dynamic model;
    var obj1ListType = new List<Obj1>().GetType();
    var obj2ListType = new List<Obj2>().GetType();
    Type unknown = Model.GetType();

    if (unknown == obj1ListType)
    {
        model = new List<Obj1>(Model);
    }
    else if (unknown == obj2ListType)
    {
        model = new List<Obj2>(Model);
    }
    else
    {
        model = new List<Obj3>(Model);
    }
}

问题在于我尝试使用

var Obj = Model.FirstOrDefault();

我得到以下异常:

'System.Collections.Generic.List' does not contain a definition for 'FirstOrDefault'

任何想法?也许是另一种创建动态局部视图的方法? 感谢

1 个答案:

答案 0 :(得分:2)

我不确定你在这里尝试做什么,但我修改了你的代码并且它有效。我不得不改变一些事情。最重要的变化是将模型(实际上你应该在那里创建的模型)转换为列表,然后在其上调用FirstOrDefault()

工作代码进行了一些调整:

@model dynamic
@{
    dynamic model;
    var obj1ListType = new List<object>().GetType();
    var obj2ListType = new List<object>().GetType();
    Type unknown = Model.GetType();

    if (unknown == obj1ListType)
    {
        model = new List<object>(Model);
    }
    else if (unknown == obj2ListType)
    {
        model = new List<object>(Model);
    }
    else
    {
        model = new List<object>(Model);
    }

    var data = model as List<object>;
    var dataItem = data.FirstOrDefault();
    <span>@dataItem</span>
}

控制器:

    public ActionResult Partial1()
    {
        return View(new List<string>(){"Test1", "Test2"});
    }

打印:

测试1