Проблемы с разбивкой на страницы в ASP.NET MVC

Я пытаюсь реализовать ту же разбивку на страницы, которая используется в 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 ... если есть способ лучше, дайте мне знать, иначе, где я здесь ошибаюсь?

Большое спасибо!


person mattruma    schedule 20.11.2009    source источник


Ответы (2)


Вы не должны использовать RouteLink (который принимает имя маршрута), а вместо этого используйте ActionLink, который принимает имя действия, такое как Index.

person HakonB    schedule 20.11.2009
comment
Это сработало! Интересно, почему и как они используют RouteLink в примере NerdDinner? - person mattruma; 20.11.2009

Что ж, метод расширения RouteLink ищет определенный маршрут с именем «Index» в Global.asax, и по умолчанию существует только 1 маршрут, определенный в Global «Default», это выглядит так:

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

Возможно, как сказал HakonB, вы должны использовать метод расширения ActionLink или определить маршрут в Global asax для разбивки на страницы.

person JOBG    schedule 20.11.2009