2012-06-16 3 views
1

Я пытаюсь выбрать и отобразить последние 5 представлений каждой категории новостей на частичном изображении. в таблице новостей есть идентификатор категории как внешний ключ. У меня есть этот код ниже, но он ничего не показывает при тестировании. может кто-нибудь помочь.MVC3 Linq select top 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

Во-первых, переместить <ul> теги вне цикла foreach а также добавьте чек, если нет записей вернулся

@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»? Если это так, вы должны использовать 'return PartialView (« _ HomeCatNews », model);' и он должен находиться в той же папке представлений, что и представление, которое оно загружается в или в общей папке, чтобы его можно было найти. –

+0

Элемент модели, переданный в словарь, имеет тип «System.Collections.Generic.List'1 [KPortal.Models.News]», но для этого словаря требуется элемент модели типа «System.Collections.Generic.IEnumerable'1 [ KPortal.Models.HomeNewzCat]. – Diin

Смежные вопросы