2011-01-25 77 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。這裏是我的控制器:

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

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

當我瀏覽到http://localhost:123/home/filter/mynameparam的方法位指示是Filter叫,但參數name總是null

有人可以給我一個指針,讓我建立我的自定義路線的正確方式,以便它將URL中的名稱部分傳遞給name參數Filter()

回答

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

偉大的東西,這沒有把戲。從現在開始需要關注路線訂購。歡呼所有這個問題的答案。 – 2011-01-25 16:25:09

1

我相信你的路由都需要倒過來?

的路由按順序處理的,所以如果第一個(默認,開箱即用的)路線的URL匹配,這就是那將要使用的一個。