2012-11-14 84 views
1

我的問題是我在MVC中製作了一個帶有三個參數的Map Route。當我提供全部三個或兩個,參數從URL傳遞給我的控制器。但是,當我只提供第一個參數時,它不會傳遞並返回null。不知道是什麼原因導致此行爲。路由參數只在MVC中提供第一個參數時返回null

路線:

 routes.MapRoute(
      name: "Details",            // Route name 
      url: "{controller}/{action}/{param1}/{param2}/{param3}",       // URL with parameters 
      defaults: new { controller = "Details", action = "Index", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional } // Parameter defaults 
     ); 

控制器:

public ActionResult Map(string param1, string param2, string param3) 
    { 

     StoreMap makeMap = new StoreMap(); 
     var storemap = makeMap.makeStoreMap(param1, param2, param3); 
     var model = storemap; 
     return View(model); 
    } 

串,當我瀏覽到參數1返回null:

/StoreMap /地圖/ PARAM1NAME

,但它不當我導航到時返回null:

/StoreMap/Map/PARAM1NAME/PARAM2NAME

+1

也許參數不正確的術語。也許這是一個ID。 –

回答

0

最有可能是默認路由干擾。我相信,在項目模板中定義的默認路由看起來是這樣的:

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

你的只有一個參數的URL匹配該模式,但因爲你沒有一個id參數的方法簽名,該值沒有按」你可以填入你的任何參數。

你可以試着改變你的「詳細信息」的路線進行硬編碼控制器是「詳細信息」,如下圖所示,並使其默認路由之前來移動它:

routes.MapRoute(
     name: "Details",            // Route name 
     url: "Details/{action}/{param1}/{param2}/{param3}",       // URL with parameters 
     defaults: new { controller = "Details", action = "Index", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional } // Parameter defaults 
    ); 


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

另外,嘗試將路線中的第一個參數和方法簽名重命名爲id

routes.MapRoute(
     name: "Details",            // Route name 
     url: "{controller}/{action}/{id}/{param2}/{param3}",       // URL with parameters 
     defaults: new { controller = "Details", action = "Index", id = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional } // Parameter defaults 
    ); 


public ActionResult Map(string id, string param2, string param3) 
{ 

    StoreMap makeMap = new StoreMap(); 
    var storemap = makeMap.makeStoreMap(id, param2, param3); 
    var model = storemap; 
    return View(model); 
} 
+0

很好的答案!謝謝。這是問題。我實際上很快就通過將默認路由器放置在我創建的路由器下面來解決它。你的回答幫助我更好地理解MVC。 –