2017-04-01 64 views
0

我是ASP.NET MVC的初學者。爲什麼第二個route.MapRoute同一個控制器得到一個空ID

我有這些路線

www.site.com/Afficher/Livre/1

www.site.com/Afficher/Auteur/2

我寫了一個控制器2個動作。總是在route.MapRoute第二動作總是得到一個空的ID

控制器文件:AfficherController

public string Auteurs() 
    { 
     return "liste des auteurs"; 
    } 

    public string Auteur(int? idAuteur) 
    { 
     return "liste des livres de l'auteur "+idAuteur+" sont :"; 
    } 

    public string Livre(int idlivre) 
    { 
     return "details du livre " + idlivre + " est : "; 
    } 

路由文件

routes.MapRoute(
    name: "afficherLivre", 
    url: "{controller}/{action}/{idlivre}", 
    defaults: new { controller = "Afficher", action = "Livre", id = UrlParameter.Optional } 
); 

     routes.MapRoute(
      name: "AfficherAuteur", 
      url: "{controller}/{action}/{idAuteur}", 
      defaults: new { controller = "Afficher", action = "Auteur", id = UrlParameter.Optional } 
     ); 
routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Afficher", action = "Auteurs", id = UrlParameter.Optional } 
     ); 
+0

嗨,歡迎來到StackOverflow。請您在提問時明確您的問題清楚易懂。這一個不是你應該編輯它。請閱讀:http://stackoverflow.com/help/how-to-ask – feedMe

+0

您的路由定義沒有意義 - 所有3條路由都是相同的 - 它們接受0到3段,並且任何url都會匹配第一條和''/ Afficher/Auteur/2'會將'2'作爲一個值傳遞給名爲'idlivre'的參數 - 但是''Auteur''方法中沒有名爲'idlivre'的參數。 - 使用'id = UrlParameter.Optional'是沒有意義的,因爲你甚至沒有一個名爲'id'的參數 –

+0

如果你想要特定的路由,那麼第一個應該是'url:「Afficher/Livre/{idlivre}」,''與'idlivre = UrlParameter.Optional'和第二個'url:「Afficher/Auteur/{idAuteur}」,'idAuteur = UrlParameter.Optional',儘管什麼是重點。只需在方法'id'中設置參數並刪除前兩條路線 –

回答

0

如果你想通過傳遞參數url,它的名字在你的ASP.NET代碼的三個地方應該是相同的:在urldefaults參數MapRoute以及動作參數中。您更改了url和動作參數,但忘記將id替換爲參數defaults中的idAuteur。如果你願意,你的代碼應該可以工作。

但是更重要的是,它看起來像是爲每個動作創建自己的MapRoute。你不需要。只需以名稱Default離開MapRoute,然後在AuteurLivre的操作中將參數名稱更改爲id

祝你好運!