2011-01-25 4 views
4

ASP.NET MVCでカスタムルートを作成する方法について学習しています。私のGlobal.asax.csファイルでは、私は次のように追加しました:ASP.NET MVCルートでパラメータ値が渡されない

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

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

    // My Custom Route. 
    routes.MapRoute(
     "User_Filter", 
     "home/filter/{name}", 
     new { controller = "Home", action = "Filter", name = String.Empty } 
    ); 
} 

アイデアはhttp://localhost:123/home/filter/mynameparamにナビゲートすることができに私のためです。私はcontoller方法Filterが呼び出されたhttp://localhost:123/home/filter/mynameparamに移動しますが、パラメータnameは常にnullとき

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Filter(string name) 
    { 
     return this.Content(String.Format("You found me {0}", name)); 
    } 
} 

:ここに私のコントローラです。

URLにある名前部分をFilter()nameパラメータに渡すように、自分のカスタムルートを作成する正しい方法についてのポインタを誰かに渡すことができますか。

答えて

7

Defaultルートが最後のものになります。 この方法で試してください:

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

    // My Custom Route. 
    routes.MapRoute(
     "User_Filter", 
     "home/filter/{name}", 
     new { controller = "Home", action = "Filter", name = String.Empty } 
    ); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 
} 
+0

すごいものでした。これからの経路の順序付けについて留意する必要があります。この質問へのすべての答えに感謝します。 –

1

あなたのルートは逆になる必要があると思いますか?

ルートは順番に処理されるため、最初の(デフォルトのOOTB)ルートがURLと一致する場合は、そのルートが使用されます。

関連する問題