ASP.NET MVC中的分页问题

时间:2009-11-20 14:15:19

标签: asp.net-mvc pagination

我正在尝试实现NerdDinner ASP.NET中使用的相同分页。每当分页开始启动时,我在视图中收到以下错误。

  

“名为'Index'的路线不可能   在路线集合中找到。“

错误发生在第64行。

Line 62:         <% if (this.Model.HasNextPage)
Line 63:            { %>
Line 64:         <%= this.Html.RouteLink("Next Page >>>", "Index", new { page = (this.Model.PageIndex + 1) })%>
Line 65:         <% } %>
Line 66:     </div>

我的控制器代码是:

[Authorize]
public ActionResult Index(int? page)
{
    const int pageSize = 25;

    var topics = this.TopicRepository.FindAllTopics();
    var paginatedTopics = new PaginatedList<Topic>(topics, page ?? 0, pageSize);

    return this.View(paginatedTopics);
}

我的观看代码是......

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CreativeLogic.Sauron.WebMvc.Helpers.PaginatedList<CreativeLogic.Sauron.WebMvc.Models.Topic>>" %>

<!-- Code to display the list here -->

<div class="pagination">
    <% if (this.Model.HasPreviousPage)
       { %>
    <%= this.Html.RouteLink("<<< Previous Page", 
                           "Index", new { page = (this.Model.PageIndex - 1) }) %>
    <% } %>
    <% if (this.Model.HasNextPage)
       { %>
    <%= this.Html.RouteLink("Next Page >>>", 
                           "Index", new { page = (this.Model.PageIndex + 1) })%>
    <% } %>
</div>

这是我第一次尝试在ASP.NET MVC中进行分页...如果有更好的方法,请告诉我,否则,我在哪里错了?

非常感谢!

2 个答案:

答案 0 :(得分:3)

您不应该使用RouteLink(它采用路由名称),而是使用ActionLink,它采用像Index这样的操作名称。

答案 1 :(得分:2)

路由链接扩展方法在Global.asax中查找名称为“Index”的已定义路由,默认情况下,在“默认”全局中只定义了1条路由,它看起来像这样:

routes.MapRoute(
   "Default",                                              // Route name
   "{controller}/{action}/{id}",                           // URL with parameters
   new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );

也许正如HakonB所说,你必须使用ActionLink扩展方法或在全局asax中为分页定义一条路线。