2012-06-16 29 views
1

我想在局部視圖中選擇和顯示每個新聞類別的最近5個提交。新聞表具有類別Id作爲外鍵。我有下面的代碼,但它在測試中什麼也沒有顯示。任何人都可以協助MVC3 Linq選擇每個類別的前5名

守則新聞控制器

public ActionResult _HomeCatNews() 
{ 
    var info = db.News 
     .GroupBy(r => r.CatId) 
     .SelectMany(g => g.OrderBy(r => r.RevDate) 
     .Take(5)) 
     .ToList(); 
    return PartialView(); 
} 

局部視圖視圖代碼如下

@model IEnumerable<KPortal.Models.HomeNewzCat> 
@using KPortal.Helpers 

@foreach (var item in Model) {   
    <ul> 
     <li> 
      <div class="image"> 
       <a href="#">@Html.DisplayFor(modelItem => item.NewsPic)</a> 
      </div> 
      <div class="details"> 
       <h5><a href="#">@Html.Raw(Html.Truncate(item.NewsContent, 55, ""))</a></h5> 
       <span class="date"> 
        @Html.DisplayFor(modelItem => item.RevisionDate) 
        @Html.DisplayFor(modelItem => item.NewSource) 
       </span> 
      </div> 
      @Html.DisplayFor(modelItem => item.NewsTitle) 
     </li>       
    </ul> 
} 

HomeNewzCat型號

namespace KPortal.Models 
{ 
    public class HomeNewzCat 
    { 
     [Display(Name = "Category ID")] 
     public int CategoryID { get; set; } 

     [Display(Name = "Category")] 
     public string Category { get; set; } 

     [Display(Name = "Revision Date")] 
     public DateTime RevisionDate { get; set; } 

     [Display(Name = "News Title")] 
     public string NewsTitle { get; set; } 

     [Display(Name = "Story Picture")] 
     public string NewsPic { get; set; } 

     [AllowHtml] 
     [Display(Name = "News Content")] 
     public string NewsContent { get; set; } 

     [Display(Name = "Source")] 
     public string NewSource { get; set; } 

     public DateTime Date { get; set; } 
    }  
} 

回答

1

首先,移動foreach循環之外你<ul>標籤並且添加一個檢查是否沒有記錄返回

@if(Model != null) { 
    <ul> 
     @foreach(var item in Model) { 
      <li> 
       <div class="image"> 
        <a href="#">@Html.DisplayFor(modelItem => item.NewsPic)</a> 
       </div> 
       <div class="details"> 
        <h5><a href="#">@Html.Raw(Html.Truncate(item.NewsContent, 55, ""))</a></h5> 
        <span class="date"> 
         @Html.DisplayFor(modelItem => item.RevisionDate) 
         @Html.DisplayFor(modelItem => item.NewSource) 
        </span> 
       </div> 
       @Html.DisplayFor(modelItem => item.NewsTitle) 
      </li> 
     } 
    </ul> 
} 

接下來,我們需要建立的HomeNewzCat列表發送到局部視圖

public ActionResult _HomeCatNews() 
{ 
    var info = db.News 
     .GroupBy(r => r.CatId) 
     .SelectMany(g => g.OrderBy(r => r.RevDate) 
     .Take(5)) 
     .ToList(); 

    var model = new List<HomeNewzCat>(); 
    HomeNewzCat record = null; 

    // first make sure we have some records 
    if(info.Count() > 0) { 
     foreach(var item in info) { 
      // you will need to modify these item.Field to match your database names 
      record = new HomeNewzCat 
         { 
          CategoryID = item.CatID, 
          Category = item.Category, 
          RevisionDate = item.RevDate, 
          NewsTitle = item.NewsTitle, 
          NewsPic = item.NewsPic, 
          NewsContent = item.NewsContent, 
          NewsSource = item.NewsSource, 
          Date = item.Date 
         }; 
      model.Add(record); 
     } 
    } 
    return PartialView("_HomeCatNewz", model); 
} 
+0

非常感謝@AlfalfaStrange我想實現你的解決方案,但我得到的錯誤是什麼去YourPartialView我在想_HomeCatNews() – Diin

+0

你得到了什麼錯誤?你能用你正在嘗試的代碼更新你的問題嗎?您的部分視圖名爲「_HomeCatNews.cshtml」嗎?如果是這樣,你應該使用'返回PartialView(「_ HomeCatNews」,模型);'它應該與它被加載到視圖或共享文件夾中的視圖位於相同的視圖文件夾中,以便找到它。 –

+0

傳遞到字典中的模型項目類型爲'System.Collections.Generic.List'1 [KPortal.Models.News]',但該字典需要類型爲'System.Collections.Generic.IEnumerable'1的模型項[ KPortal.Models.HomeNewzCat]」。 – Diin