2011-04-13 41 views
7

有人能告訴我我做錯了什麼嗎? :-)在ViewBag中填充匿名類型導致模型綁定器問題

我有這個簡單的查詢:

var sample = from training in _db.Trainings 
       where training.InstructorID == 10 
       select new { Something = training.Instructor.UserName }; 

而且我通過這ViewBag。

ViewBag.Sample = sample; 

然後我想訪問它在我看來是這樣的:

@foreach (var item in ViewBag.Sample) { 
    @item.Something 
} 

而且我遇到錯誤信息「對象」不包含「東西」的定義。如果我只放在那裏@item,我得到結果{ Something = SomeUserName }

感謝您的幫助。

回答

16

這是無法完成的。 ViewBag是動態的,問題是匿名類型是以內部方式生成的。我建議你使用一個視圖模型:

public class Instructor 
{ 
    public string Name { get; set; } 
} 

然後:

public ActionResult Index() 
{ 
    var mdoel = from training in _db.Trainings 
       where training.InstructorID == 10 
       select new Instructor { 
        Name = training.Instructor.UserName 
       }; 
    return View(model); 
} 

,並在視圖:

@model IEnumerable<Instructor> 
@foreach (var item in ViewBag.Sample) { 
    @item.Something 
} 
+1

+1 - 注意他是如何選擇'新Instructor'一具體類型 - 不是匿名類型。這樣他可以訪問對象內的信息。 – 2011-04-13 13:01:38

+0

它有幫助。謝謝回答。 – 2011-04-13 13:04:37