13

我在過去一個月左右一直在研究一個大型的MVC應用程序,但這是我第一次需要定義一個自定義的路由處理程序,而且我遇到了一些問題。基本上我有兩個參數可以通過。第一個是必需的,第二個是可選的。帶有一個必需參數和一個可選參數的ASP.NET MVC路由?

我在關注此問題here

這裏是我的自定義路線:

routes.MapRoute(
    "MyRoute", 
    "{controller}/{action}/{param1}/{param2}", 
    new { 
     controller = "MyController", 
     action = "MyAction", 
     param1 = "", 
     param2 = "" // I have also tried "UrlParameter.Optional" here. 
    } 
); 

而我的操作方法的簽名:

public ActionResult MyAction(string param1, string param2) 

如果我嘗試的URL http://[myserver]/MyController/MyAction/Test1/Test2然後它就像我期望它,用參數1 =「測試1 「和param2 =」Test2「

如果我嘗試URL http://[myserver]/MyController/MyAction/Test1那麼這兩個參數都是空的。

希望有人能告訴我我在這裏做錯了什麼,因爲我迷路了。

+0

從未來嗨 - 嘗試屬性路由現在 - Way路更輕鬆,不易出錯。 – niico

回答

13

我假設你創建了新的途徑,並留下一個默認,這是非常類似於你。你應該知道,路線的集合被遍歷以找到第一個匹配的路線。所以,如果你已經離開了默認的:

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

您的路線上面,然後它會匹配請求http://[myserver]/My/MyAction/Test1並調用MyController.MyAction,並設置「文本1」,以參數命名id。這將失敗,因爲此操作未聲明一個名爲id

你需要做的是將您的路線首先在路由表,使之更加具體,然後現在是:

routes.MapRoute(
      "Route", 
      "My/{action}/{param1}/{param2}", 
      new 
      { 
       controller = "My", 
       action = "MyAction", 
       param1 = "", 
       param2 = "" 
      }); 

這將迫使所有的流量路由低谷My匹配這條路線。

+1

無論我做什麼,我都無法獲取多個參數,在這樣的路徑中工作。如果我嘗試創建2個參數並使用像My/MyAction/param1/param2這樣的URL來請求頁面,則會出現404錯誤。我究竟做錯了什麼? – DavidHyogo

1

喜創建您狂勝喜歡我認爲這將HEP你

routes.MapRoute(
       "Regis", // Route nameRegister 
       "Artical/{id}", // URL with parameters 
       new { controller = "Artical", action = "Show", id = UrlParameter.Optional } // Parameter defaults 
      ); 
0

嘗試此

routes.MapRoute("MyRoute", 
       "myRoute/{param1 }/{param2 }", 
       new { controller = "MyController", action = "MyAction", param2 = UrlParameter.Optional }, 
       new { param2 = @"\w+" }); 

可以通過使用「UrlParameter.Optional」指定一個參數作爲可選的,並且指定第二個與數據類型意味着如果傳遞整數值然後字段類型字段(@「\ d +」)對於我上面提到的字符串。

注:序列參數是非常重要的可選參數必須通過最後註冊默認路由之前,你的新路線在Gloab.asax

,那麼你的跳轉鏈接像

<a href="@Url.RouteUrl("MyRoute", new { param2 = "Test1",param1 = "Test2"})">Test</a> 

或與一個參數

<a href="@Url.RouteUrl("MyRoute", new { param2 = "Test1"})">Test</a> 

在您控制器

public ActionResult MyAction(string param2,string param1) 
{ 
    return View() 
} 
相關問題