2012-08-06 63 views
0

在我有限的(2周)在asp.net MVC3中的經驗中,對於大多數操作方法,我從不需要添加路由註冊。但我注意到,如果action方法有一個輸入參數,那麼我不能訪問該方法的形式爲www.mysite.com/myController/myAction/myParameter1/myParameter2/myParameter3(不帶?標記)的url,除非我映射路線。這是它應該如何?在asp.net MVC中,如果url有一個參數,路由是否需要註冊?

回答

2

默認情況下,你已經登記路徑:

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

它接受一個參數,名爲id,那麼你的行動:

public ActionResult MyAction(string id) 

會 「抓」 的要求:

www.mysite.com/MyController/MyAction/parameter_value 

id將得到值「parameter_value」。

如果您需要多個參數(或者參數必須是除id之外的其他名稱),那麼您必須註冊新的路由。

像這樣的情況下,當你有2個參數,你會註冊路線:

routes.MapRoute(
        "Default", 
        "{controller}/{action}/{parameter1}/{parameter2}", 
        new { controller = "Home", action = "Index", parameter1 = UrlParameter.Optional, parameter2=UrlParameter.Optional } 
       ); 

和你的行動可能是:

public ActionResult MyAction(string parameter1, int? parameter2) 
+0

修改了問題以包含多個參數。 – developer747 2012-08-06 00:33:24

1

是的,你需要註冊自定義路線的路線在global.asax根據您的要求。您必須按以下方式註冊路線:

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

因此,通過上述路徑,它可以確保只要您的網址以上述格式顯示,參數"action/"之後的參數將被視爲參數.....

對於您網址中的多個參數,您可以註冊爲這個:

routes.MapRoute(
      "routeName",            // Route name 
      "{controller}/{action}/{myParameter1}/{myParameter2}/{myParameter3}",       // URL with parameters 
      new { controller = "Home", action = "Index", myParameter1= "", myParameter2= "", myParameter3= "" } // Parameter defaults 
     ); 
相關問題