2010-01-04 99 views
0

我爲ASP.NET MVC中的網站開發了一個新聞頁面,其URL是localhost/News。 爲此,我開發了一個控制器,模型和一個視圖,它遍歷模型中的所有項目並顯示它們。 此頁面按數據的降序顯示數據庫中的所有新聞。 我已經使用路由新聞/ {id}來詳細顯示該特定新聞。ASP.NET MVC的新聞部分

如果我想在我的主頁上只顯示前5個新聞帖子,我該怎麼做? 控制器可以重複使用嗎?或者我需要重寫從我的數據庫獲取新聞記錄的代碼?

+0

請提供一些細節,因爲它現在沒有太多的意義。你使用什麼數據庫?你如何從數據庫中獲得新聞?如果你想只取5,取5,它可能看起來像'db.News.OrderByDescending(n => n.Date)。取(5)' – LukLed 2010-01-04 00:32:22

+0

數據庫應該是不相關的,這是一個模式實現而不是數據庫交互的問題。他們已經提供了足夠的相關信息。反對票相當苛刻。 – nathanchere 2010-01-11 22:47:21

回答

1

我會這樣做的方式是有一個視圖,需要IQueryable新聞項目列表。

然後,我會有一個PartialView呈現只有一個新聞項目。

然後,My View將通過IQueryable集合進行迭代並使用foreach (NewsItem item in Model){}呈現它在那裏找到的所有新聞項目。每個新聞項目都將在PartialView中呈現。

在這一點上,滿足提供新聞項目的要求。如果你現在只想顯示前5名,那麼我會改變我的路線,像News/{top}。通過這種方式,我可以將數字傳遞給控制器​​以返回前5名。

@ LukLed有關使用的建議如果您使用的是LINQ,請採用正確的方法。如果沒有,那麼使用你自己的算法來獲得前5個職位。

無論如何,然後在你的索引視圖中,你可以有一個鏈接說,這是未經測試的,類似的;

<%= Html.ActionLink("Top 5", "Index", new { top=5 }) %> 

不知道如果以上是正確的,但你明白了。

現在你可以有幾個鏈接,允許前n個職位。

+0

感謝您的評論。讓我解釋一下我想要使用它的場景。我想在典型企業主頁的右下角顯示最近的新聞(因此排名前5)。此外,我還在最近的新聞「Under More」中有一個鏈接,鏈接位於www.domain.com/News/。它顯示數據庫中的所有新聞。 所以我想要5個超鏈接在主頁上顯示前5名。我唯一的問題是我必須再次在主頁上使用數據庫上下文,或者我可以從主頁使用News/Top/5之類的東西(就像服務調用一樣)。如果後者是可能的,那麼我想知道如何去做 – 2010-01-04 05:08:08

0

我做了一些搜索後得到了一些想法。我想知道這些能有所幫助:

  1. 使用局部視圖,使其遵循DRY原則
  2. 設計與JsonResult的方法作爲返回類型,並使用它與jQuery。

歡迎任何其他建議。

0

您對使用部分視圖和jQuery的評論非常有意義。

我從來沒有真正明白你爲什麼要重用你的行爲。

做你想要的部分視圖和jQuery是別人怎麼做的。它很快,看起來很花哨和光滑。

1

我最近有幾乎相同的問題。我最終使用了MVC Futures RenderAction實現。一個很好的例子,說明如何使用它是在這裏:

http://eduncan911.com/blog/html-renderaction-for-asp-net-mvc-1-0.aspx

基本上你有這樣的事情在你的ArticleController(我不叫我的「NewsController」只是因爲我疑神疑鬼假設「新聞報」的類型是「新」的集合:P)...

public ActionResult SidebarBox() 
{ 
// I use a repository pattern to get records, just replace it with whatever you use 
// also replace *.Take(5)* with however many you want returned 
return View(repoArticles.GetAllArticles().Take(5).ToList()); 
} 

,並在你的母版頁(或任何你想要顯示它),你會使用:

<% Html.RenderAction<ArticleController>(c => c.SidebarBox()); %> 

然後查看只有側欄框的代碼。

+1

爲了讓生活變得更輕鬆(假設您使用的是標準工具),請記住將您的SidebarBox視圖生成爲類型爲List的強類型局部視圖。 – nathanchere 2010-01-11 23:58:57

0

我會這樣做的方式是有一個視圖,需要IQueryable新聞項目列表。

然後,我會有一個PartialView呈現只有一個新聞項目。

然後,My View將通過IQueryable集合進行迭代,並使用foreach(NewsItem item in Model){}呈現它在那裏找到的所有新聞項目。每個新聞項目都將在PartialView中呈現。

在這一點上,滿足提供新聞項目的要求。如果您現在只想顯示前5名,那麼我會將我的路線更改爲News/{top}。通過這種方式,我可以將數字傳遞給控制器​​以返回前5名。

@ LukLed有關使用的建議如果您使用的是LINQ,請採用正確的方法。如果沒有,那麼使用你自己的算法來獲得前5個職位。