2009-11-20 1 views
1

Я пытаюсь реализовать ту же страницу, которая используется в NerdDinner ASP.NET. Я получаю следующее сообщение об ошибке на мой взгляд, когда пагинация начинает пинать в.Проблемы с разбиением на страницы в ASP.NET MVC

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

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

ответ

3

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

+0

Это сделало трюк! Интересно, почему и как они используют RouteLink в примере NerdDinner? – mattruma

2

Ну, метод маршрутизации RouteLink ищет определенный маршрут с именем «Индекс» в Global.asax, и по умолчанию только один маршрут, определенный в глобальном «По умолчанию», выглядит следующим образом:

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

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

+0

+1 Спасибо за объяснение! – mattruma

 Смежные вопросы

  • Нет связанных вопросов^_^