2013-05-16 60 views
2

在我的ASP MVC的Web應用程序,我的控制器往往有行動「名稱」的參數,如:ASP MVC路由 - 如何更改默認的ID參數的名稱,同時保持默認路由完好

Function Consult(name As String) As ActionResult 

    ..... 

    Return View() 
End Function 

我想能夠瀏覽這些行動以同樣的方式我會瀏覽他們與「ID」參數:../Book/Consult/MyBookName

但我想的默認路由,繼續工作「id」參數。換句話說,我希望默認路由接受「id」或「name」作爲參數名稱。

因此,我試圖配置我的路線,但它不工作,因爲所有的請求似乎使用第一條路線,而不是第二條路線。帶有「id」參數的操作不再起作用。

 routes.MapRoute(_ 
     name:="Name", _ 
     url:="{controller}/{action}/{name}", _ 
     defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _ 
    ) 

    //Default Route 
    routes.MapRoute(_ 
     name:="Default", _ 
     url:="{controller}/{action}/{id}", _ 
     defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _ 
    ) 

我的代碼示例是在VB中,但我會接受在C#中的答案以及:)謝謝很多人。

編輯:澄清,如果我只是簡單地將參數重命名爲「ID」,一切工作正常,只是在我的路由配置默認路由。但我想保留「名稱」,因爲它在這些特定情況下更加乾淨。

+0

是什麼類型你'id'?知道這一點很重要,就好像'Name'路線將首先出現,我們希望將它從具有id的匹配路線中排除,如果可以的話(可能存在名稱看起來像id的情況,在這種情況下,我們很難認識到這是一個名稱,而不是一個id) –

+0

在我的情況下,'id'是整數,但是可以保持默認路由與任何類型的'id'?在將來,我可能不得不支持字符串ID例如.. – JayMF

回答

0

我相信你的問題是在默認設置:

routes.MapRoute(_ 
     name:="Name", _ 
     url:="{controller}/{action}/{name}", _ 
     defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _ 
    ) 

.ID應該符合您的參數名稱,以便嘗試:

routes.MapRoute(_ 
      name:="Name", _ 
      url:="{controller}/{action}/{name}", _ 
      defaults:=New With {.controller = "Home", .action = "Index", .name = UrlParameter.Optional} _ 
     ) 
+0

你是對的,這是一個複製粘貼錯誤。但這不是我的問題的原因。謝謝。 – JayMF