【问题标题】:Anonymous types object creation and passed into MVC# razor view?匿名类型对象创建并传递到 MVC# razor 视图?
【发布时间】:2011-09-27 02:08:14
【问题描述】:

Q1:以下哪个更好的速记版本? Q2:如何在 mvc3 中将匿名类型传递给我的视图?

    public ViewResult Index3()
    {
        List<T1> ls = new List<T1>();
        ls.Add(new T1 { id = 1, title = "t1", val1 = 1, val2 = 2});
        ls.Add(new T1 {id=2, title="t2", val1=3, val2=4});
        ls.Add(new T1 { id = 3, title = "t3", val1 = 5, val2 = 6});

        return View(ls);
    }

(Q1)类似于?:

        List<T1> ls = new List<T1>(
            List<T1>(new { id = 1, title = "t1", val1 = 1, val2 = 2}
            new { id = 2, title = "t2", val1 = 3, val2 = 4})
        );

(Q2)类似的东西?:

    public ViewResult Index3()
    {                           
        return View(List(new { id = 1, title = "t1", val1 = 1, val2 = 2 }
            new { id = 2, title = "t2", val2 = 3, val2 = 4 }
        );
    }

然后在剃刀视图中引用上述内容:

    @model IEnumerable<Some Anonymous or Dynamic Model>

    @item.id
    @item.title
    @item.val1
    ...

【问题讨论】:

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


    【解决方案1】:

    Q1 是一个偏好问题。由于编译器内部创建了类似的代码,因此没有性能差异。

    Q2 是不可能的,您必须创建一个非匿名类型才能访问它。

    【讨论】:

      【解决方案2】:

      可以使用 ViewBag 将您的列表传递给视图。

      【讨论】:

      • 我绝对不会推荐这个。 ViewBag 实际上应该只用于页面标题或消息之类的内容,仅此而已。
      【解决方案3】:
      1. 集合初始化器是这样写的:

        List<T1> ls = new List<T1> {
            new T1 { id = 1, title = "t1", val1 = 1, val2 = 2 },
            new T1 { id = 2, title = "t2", val1 = 3, val2 = 4 },
            new T1 { id = 3, title = "t3", val1 = 5, val2 = 6 }
        };
        
      2. 创建一个隐式类型数组:

        return View(new [] { new { id = 1, ... }, ... });
        

      【讨论】:

        【解决方案4】:

        这两个选项都不起作用,因为匿名类型是 internal 并且 razor 视图被编译到单独的程序集中。

        见: Dynamic view of anonymous type missing member issue - MVC3

        【讨论】:

          猜你喜欢
          • 2012-03-08
          • 2012-07-07
          • 1970-01-01
          • 2019-01-13
          • 1970-01-01
          • 2020-04-24
          • 2010-09-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多