2016-02-02 46 views
1

爲什麼模型爲null? 我覺得我的方法是錯誤的,它不是將數據傳遞到視圖我的模型爲空

我的控制器

public ActionResult AnnounceRead() 
{ 
    using (var db = new HarmonyMainServerDbContext()) 
    { 
     var announceList = from r in db.Announcer 
          select new { r.AnnounceTitle, r.AnnounceLink, }; 
     return View("Index", announceList); 
    } 
} 

我看來

@model IEnumerable<Harmony.Models.ANNOUNCEMENT> 
<ul> 
    @if (Model != null) 
    { 
     foreach (var item in Model)   
     { 
      <li><a href="@item.AnnounceLink"> Title: @item.AnnounceTitle</a></li>     
     }   
    }     
</ul> 

我的模型

public class ANNOUNCEMENT 
{ 
    [Key] 
    public int AnnounceID { get; set; } 
    public string AnnounceTitle { get; set; } 
    public string AnnounceRemarks { get; set; } 
    public string AnnounceLink { get; set; } 
    public int CreatedBy { get; set; } 
} 
+2

以及視圖將嘗試你做了處置'db'上下文後評估結果...所以你應該在'using(var db = ...'塊內部添加一個'.ToList()',並且所有的都應該很好(順便說一句:我敢打賭,這是一個ObjectDisposed異常,但也許前一天發生了變化) – Carsten

+2

你創建一個匿名對象(而不是'IEnumerable ')和你的代碼會導致一個錯誤,你只需要返回View(「Index」,db.Announcer.ToList());' –

回答

0
var announceList = (from r in db.Announcer 
            select new { r.AnnounceTitle, r.AnnounceLink }).ToList(); 

編輯: 只需添加.ToList();

,如果開銷並不重要,數據是小剛送db.Announcer

+1

這是如何解決OP的問題的? – Marco

0
public ActionResult AnnounceRead() 
{ 
    using (var db = new HarmonyMainServerDbContext()) 
{ 
    var announceList = db.Announcer.Select(x=> new ANNOUNCEMENT{ 
         AnnounceTitle = x.AnnounceTitle, 
         AnnounceLink = x.AnnounceLink 
}).ToList(); 

    return View("Index", announceList); 
} 

}

+0

從原始集合中創建一個相同集合的要點是什麼?它可以只是'var announceList = db.Announcer.ToList();' –

+0

,因爲他只需要2個屬性作爲輸出AnnounceTitle,AnnounceLink而不是整個模型。 – Itniv

+0

沒有什麼區別 - 它只是沒有意義的額外開銷。如果你要創建一個新的對象,它應該被投影到僅包含這兩個屬性的視圖模型 –