ASP.Net MVC添加寻呼机但无法找到路由

时间:2013-07-16 14:27:10

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我在添加新路线方面遇到了麻烦,允许我进行分页。

在我的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

谁能看到我做错了什么?我怀疑它在我的路线某处...

谢谢,

标记

2 个答案:

答案 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 }
    );
}