2013-03-12 46 views
2

我在Visual Studios,MVC 3,Razor引擎中创建新闻传送项目,我试图只显示一次,比如说10个提要数量。在index.cshtml中只显示x个项目数量

目前而我得到的数据库会我用这个index.cshtml:

@model IEnumerable<NyjiGrunnur.Models.Article> 

@{ 
ViewBag.Title = "NewsFeed"; 
} 

<h2>@ViewBag.Message</h2> 

    @foreach (var item in Model) 
    { 
     <div id="eitt"> 
      <fieldset> 
       <legend>@Html.ActionLink(item.Name, "Edit", new { id=item.Id })</legend> 
       <div>@item.Subject, @item.Created</div> 
       <p>@Html.Raw(item.Content.Replace(Environment.NewLine, "<br/>"))</p> 
      </fieldset> 
     </div> 
    } 

在foreach需要每一个项目,我想知道如果我可以使用一个for循环或类似只显示东西10个最新的Feed。

在此先感谢。

+2

'@foreach(VAR在Model.OrderByDescending(项x => x.Created)。取(10))' – 2013-03-12 16:14:29

+1

限制列表_in的Controler_。 – 2013-03-12 16:16:09

+0

@IliaG谢谢,labda表达式会照顾它。 – Mappan 2013-03-12 16:19:13

回答

4

你可以保持一个计数器变量和显示数据

@{ 
    int counter=0; 
} 
foreach (var item in Model) 
{ 
    counter++; 
    if(counter<=10) 
    { 
     <div id="eitt">@item.Name</div> 
    } 
} 

前检查它,但它是更好地做到这一点,在你的行动方法并返回仅10个项目的视图,以便你不您需要通过添加if语句来污染您的视图。您可以使用LINQ中的Take方法获取10个项目。

public ActionResult Newsfeed() 
{ 
List<Article> articleList=new List<Article>(); 

articleLsit=GetListOfItemsFromSomewhere(); 
//now get only 10. you may apply sorting if needed 
articleList=articleList.Take(10); 

return View(articleList); 
} 
0

这将是更好的

@foreach (var item in Model.Take(10)) 
    { 
     <div id="eitt"> 
      <fieldset> 
       <legend>@Html.ActionLink(item.Name, "Edit", new { id=item.Id })</legend> 
       <div>@item.Subject, @item.Created</div> 
       <p>@Html.Raw(item.Content.Replace(Environment.NewLine, "<br/>"))</p> 
      </fieldset> 
     </div> 
    }