ASP.Net MVC添加寻呼机但路由可以';找不到

本文关键字:找不到 路由 MVC Net 添加 寻呼机 ASP | 更新日期: 2023-09-27 18:22:28

我在添加新路由以进行分页时遇到问题。

在我的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。您正在查找的资源(或其依赖项)可能已被删除、名称已更改或暂时不可用。请查看以下URL并制作确保拼写正确。

请求的URL:/offer/page/1

有人看到我做错了什么吗?我怀疑它在我的路线上。。。

谢谢你,

标记

ASP.Net MVC添加寻呼机但路由可以';找不到

交换两条路线。添加到路线表中的路线顺序很重要。新的自定义路由被添加到现有的默认路由之前。如果颠倒了顺序,则将始终调用默认路由,而不是自定义路由。

        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

MVC使用与URL匹配的第一个有效根。您的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 }
    );
}