ASP.NET MVC的新闻部分

时间:2010-01-04 00:07:53

标签: asp.net-mvc

我为ASP.NET MVC中的网站开发了一个新闻页面,其URL为localhost / News。 为此,我开发了一个控制器,模型和视图,它迭代模型中的所有项目并显示它们。 此页面按日期的降序显示数据库中可用的所有新闻。 我使用路由新闻/ {id}来详细显示该特定新闻。

如果我想在我的主页上只显示最近5篇新闻帖,我该怎么办? 控制器可以重复使用吗?或者我需要重写代码以从我的数据库中获取新闻记录?

5 个答案:

答案 0 :(得分:1)

我接近这个方法的方法是让View获取一个IQueryable新闻列表。

然后我会有一个PartialView,它只呈现一个新闻项目。

我的视图将通过IQueryable集合进行迭代,并使用foreach (NewsItem item in Model){}呈现它在那里找到的所有新闻项。每个新闻项目都将在PartialView中呈现。

此时,满足了渲染新闻项目的要求。如果你现在只想显示前5名,那么我会将我的路线更改为News/{top}。这样我就可以将一个数字传递给控制器​​以带回前5位。

@LukLed建议如果使用LINQ,请使用正确的方法。如果没有,那么使用你自己的算法来获得前5个帖子。

无论如何,然后在你的索引视图中,你可以有一个链接,说明这是未经测试的,例如;

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

不确定上述内容是否合适,但您明白了。

现在,您可以拥有多个允许前n个帖子的链接。

答案 1 :(得分: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()); %> 

然后看一下只有侧边栏代码的视图。

答案 2 :(得分:0)

我做了一些搜索后得到了一些想法。我想知道这些是否有用:

  1. 使用部分视图使其遵循DRY原则
  2. 使用JsonResult作为返回类型设计一个方法,并将其与jquery一起使用。
  3. 欢迎任何其他建议。

答案 3 :(得分:0)

您对使用部分视图与jQuery的评论非常有意义。

我从未真正理解您为什么要重复使用您的操作。

使用部分视图和jQuery执行您想要的操作是其他人如何做到这一点。它很快,看起来很花哨。

答案 4 :(得分:0)

我接近这个方法的方法是让View获取一个IQueryable新闻列表。

然后我会有一个PartialView,它只呈现一个新闻项目。

我的视图将通过IQueryable集合进行迭代,并使用foreach(模型中的NewsItem项目){}呈现它在那里找到的所有新闻项。每个新闻项目都将在PartialView中呈现。

此时,满足了渲染新闻项目的要求。如果您现在只想显示前5名,那么我将改变我的路线,就像新闻/ {top}。这样我就可以将一个数字传递给控制器​​以带回前5名。

@LukLed关于使用的建议如果您使用LINQ,请使用正确的方法。如果没有,那么使用你自己的算法来获得前5个帖子。