2012-01-13 9 views
2

MVC 3でNerdDinnerチュートリアルをベースにしてシステムを作成しました。私はルーティングを完全に理解しているかどうかはわかりません。ASP.NET MVC 3 - 難しさを理解するルート

私が持っている改ページヘルパーにソートを追加するまで、すべてが正常に機能していました。ここで

は、私はあなたが最初に(正常に動作します)ページに移動したときにイベント日付の昇順で並べ替えるには、リストをデフォルトにしたいglobal.asax.cs

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "UpcomingKeyDates", // Route name 
     "KeyDates.mvc/{sortBy}/Page/{page}", // URL with parameters 
     new { controller = "Home", action = "Index" } // Parameter defaults 
    ); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}.mvc/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", sortBy = "EventDate" } // Parameter defaults 
    ); 

    routes.MapRoute(
     "Root", // Route name 
     "", // URL with parameters 
     new { controller = "Home", action = "Index", sortBy = "EventDate" } // Parameter defaults 
    ); 

} 

です。並べ替えと改ページもうまくいきます。しかし、私はこのリンクを使用しています...

<%: Html.ActionLink("Create New", "Create", "Home") %> 

このリンクは単に同じページに送られています。新しいルートを追加する必要がありますか、既存のルートを修正する必要はありますか?どんな助けでも大歓迎です。

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

答えて

1

デフォルトルートは常に最後に表示され、キャッチオールルートです。これは、自動的にページが多数あることを行っている場合は、あなたが使用してそれを制約することができ、デフォルトルートは、常に次の形式

また
routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "foo", action = "bar", id=UrlParameter.Optional } 
); 

を持っている必要がありhttp://yourdomain.com/

に相当し、空のルートをキャッチします正規表現(下記参照)。簡単に言うと

、それはこのようになりますあなたのGlobal.asaxを変更:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "UpcomingKeyDates", // Route name 
     "KeyDates.mvc/{sortBy}/Page/{page}", // URL with parameters 
     new { controller = "Home", action = "Index" }, // Parameter defaults 
     new { page = @"\d+" } // Note I have constrained the page so it has to be an integer... 
    ); 

    routes.MapRoute(
     "MyDefaultRoute", // Your special default which inserts .mvc into every route 
     "{controller}.mvc/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id=UrlParameter.Optional, sortBy = "EventDate" } // Parameter defaults 
    ); 

    routes.MapRoute(
     "Default", // Real default route. Matches any other route not already matched, including "" 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id=UrlParameter.Optional, sortBy = "EventDate" } // Parameter defaults 
    ); 
} 
+0

魅力を動作すること。どうもありがとう!あなたがどのように知っているとき簡単! :-) –

+0

心配しないで、喜んで助けてください。ルーティングはおそらくMVCの中で最も難しいものです! :-) –