我为ASP.NET MVC中的网站开发了一个新闻页面,其URL为localhost / News。 为此,我开发了一个控制器,模型和视图,它迭代模型中的所有项目并显示它们。 此页面按日期的降序显示数据库中可用的所有新闻。 我使用路由新闻/ {id}来详细显示该特定新闻。
如果我想在我的主页上只显示最近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)
我做了一些搜索后得到了一些想法。我想知道这些是否有用:
欢迎任何其他建议。
答案 3 :(得分:0)
您对使用部分视图与jQuery的评论非常有意义。
我从未真正理解您为什么要重复使用您的操作。
使用部分视图和jQuery执行您想要的操作是其他人如何做到这一点。它很快,看起来很花哨。
答案 4 :(得分:0)
我接近这个方法的方法是让View获取一个IQueryable新闻列表。
然后我会有一个PartialView,它只呈现一个新闻项目。
我的视图将通过IQueryable集合进行迭代,并使用foreach(模型中的NewsItem项目){}呈现它在那里找到的所有新闻项。每个新闻项目都将在PartialView中呈现。
此时,满足了渲染新闻项目的要求。如果您现在只想显示前5名,那么我将改变我的路线,就像新闻/ {top}。这样我就可以将一个数字传递给控制器以带回前5名。
@LukLed关于使用的建议如果您使用LINQ,请使用正确的方法。如果没有,那么使用你自己的算法来获得前5个帖子。