2014-02-19 46 views
2

嗨正確地讀出我有一個網址爲我的MVC應用4URL沒有得到通過MVC 4路由

http://localhost/ABC/Home/DeleteApp/3000

如下,我已經如下

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

配置RouteConfig.cs它轉到正確的DeleteApp控制器,但ID值爲空。它顯示正確的URL,當我啓用螢火蟲。

什麼可能會出錯? 它調試並來到這裏,但id字段爲空;

public void DeleteApp(string id) 
    { 
     try 
     { 

      // delete logic 
     } 
     catch (Exception e) 
     { 
      // 
     } 
    } 
+0

有點難以回答這個問題,沒有看到您的控制器。 –

+0

請向我們顯示控制器:) –

+0

當您在地址欄中鍵入url或者在視圖中生成actionlink時發生? –

回答

1

候選條件的原因:

- >檢查 「ID」 變量名(必須完全在RouteConfig和控制器動作相同的名稱,它是區分大小寫)

- >如果映射爲{controller}/{action}/{something}而另一個映射爲{controller}/{action}/{something_else}的路由在調用url「Home/DeleteApp/3000」時,它不能分辨出是否存在如果映射爲{controller}/{action}/{something} 3000是「somethi ng「或」something_else「,所以它會採取第一場比賽。

爲了使這個工作,你必須使用「路由約束」 http://www.codeproject.com/Articles/641783/Customizing-Routes-in-ASP-NET-MVC

+0

哇是的,你是100%正確的如何避免這種情況? – Kalanamith

+1

哪一個是正確的原因? –

+0

還有另一種配置作爲命名url:「{controller}/{action}/{mobile_num}」 – Kalanamith

1

你需要做的是像這樣:

  routes.MapRoute(
     name: "ABC", 
     url: "ABC/{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     );  
+0

仍然ID字段爲空 – Kalanamith

+0

告訴我的動作鏈接,生成此ID PLZ? –

+0

操作鏈接是Home/DeleteApp/30507 – Kalanamith

1

如果你想擁有URL這種格式http://localhost/ABC那麼你將不得不通過增加農行{控制器}修改爲下面的路線/ {action}/{id}表達式。

routes.MapRoute(
     name: "Default", 
     url: "ABC/{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     );