1

ページングを実行できるようにするために、新しいルートを追加するのに問題があります。

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。探しているリソース (またはその依存関係の 1 つ) は、削除されたか、名前が変更されたか、一時的に利用できない可能性があります。次の URL を見直して、スペルが正しいことを確認してください。

要求された URL: /offer/page/1

誰かが私が間違ったことを見ることができますか? 私はそれが私のルートのどこかにあるのではないかと疑っています...

ありがとうございました、

マーク

4

2 に答える 2

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をご覧ください。

于 2013-07-16T14:29:31.260 に答える
2

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 }
    );
}
于 2013-07-16T14:33:50.370 に答える