2011-09-25 66 views
0

Q1:什麼是以下更好的簡寫版本? Q2:如何將匿名類型傳遞給我在mvc3中的視圖?創建匿名類型對象並傳入MVC#剃鬚刀視圖?

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 
    ... 

回答

1

Q1是一個偏好問題。編譯器在內部創建類似的代碼時沒有性能差異。

Q2是不可能的,您必須創建一個非匿名類型才能訪問它。

1

可以使用ViewBag將您的列表傳遞給視圖。

+2

我絕對不會推薦這樣做。 ViewBag應該只用於頁面標題或消息之類的東西,而不應該僅僅用於其他東西。 – Buildstarted

0
  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, ... }, ... });