我正在尝试实现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中进行分页...如果有更好的方法,请告诉我,否则,我在哪里错了?
非常感谢!
答案 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中为分页定义一条路线。