我在添加新路线方面遇到了麻烦,允许我进行分页。
在我的Route.Config.cs文件中,我添加了一条新路线UpcomingOffers
:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "UpcomingOffers",
url: "Offer/Page/{page}",
defaults: new { controller = "Offer", action = "Index" }
);
}
}
我的Global.asax.cs文件位于Application_Start:
下 RouteConfig.RegisterRoutes(RouteTable.Routes);
在我的优惠控制器中,我有:
//
// GET: /Offer/
// GET: /Offer/Page/2
public ActionResult Index(int? page)
{
const int pageSize = 10;
var item = db.Customers.OrderByDescending(x => x.OfferCreatedOn).ToList();
var paginatedItems = item.Skip((page ?? 0) * pageSize)
.Take(pageSize)
.ToList();
return View(paginatedItems);
}
但是当我导航到http://localhost:64296/offer/page/1
时 - 我收到错误消息:
无法找到资源。
描述:HTTP 404.您正在寻找的资源(或其中一个 依赖项)可能已被删除,其名称已更改,或者是 暂时不可用。请查看以下网址并制作 确保它拼写正确。
请求的网址:/ offer / page / 1
谁能看到我做错了什么?我怀疑它在我的路线某处...
谢谢,
标记
答案 0 :(得分:8)
交换你的2条路线。添加到路由表的路由顺序很重要。在现有的默认路由之前添加新的自定义路由。如果您颠倒了订单,那么将始终调用默认路线而不是自定义路线。
routes.MapRoute(
name: "UpcomingOffers",
url: "Offer/Page/{page}",
defaults: new { controller = "Offer", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
有关自定义路线的详情,请http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-custom-routes-cs
答案 1 :(得分:2)
MVC使用与URL匹配的第一个有效根。
您的网址与第一个匹配的{controller}/{action}/{id}
匹配。这就是为什么它试图找到一个Controler = Offer和Action = Page。
只需在global.asax
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "UpcomingOffers", url: "Offer/Page/{page}", defaults: new { controller = "Offer", action = "Index" } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }