2012-12-21 59 views
3

這兩個代碼是否相同?RouteValueDictionary初始化和MapRoute問題

RouteValueDictionary dic=new RouteValueDictionary(); 
dic.Add("controller", "Home"); 
dic.Add("action", "Index"); 
RouteTable.Routes.MapRoute("Test", "Test/Something", dic); 

RouteTable.Routes.MapRoute("Test", "Test/Something", new{controller="Home", action="Index"}); 

我沒有收到在路由表中的同一條路線。當我使用第一個選項時,「控制器」和「動作」鍵不在RouteTable.Routes[0].Defaults.Keys中,但添加在RouteTable.Routes[0].Defaults.Values

您知道我在做什麼錯誤的第一個選項嗎?

+0

MapRoute的第三個參數是object不是RouteValueDictionary。 –

+0

你知道我可以使用什麼類型的表達,作爲匿名類型的第三個參數不同(我有一個與所有信息(控制器,動作,參數等)的實例... – Jose3d

+0

你可以使用任何類型的對象 –

回答

3

可以傳遞的任何類型的第三參數,但傳遞的對象的對象必須包括在找你URL模式定義的鍵,因爲它是在這種情況下找你對象必須properties.for例如

public class test 
    { 
     public string controller { get; set; } 
     public string action { get; set; } 
     public string id { get; set; } 
    } 

    routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new test { action = "Index", controller = "Home", id = "" } 
     ); 

包括controller,action,id屬性。

+0

任何方式,如果相反像「測試」類,我有一個字典<字符串,對象>與鍵和值。 – Jose3d

+0

no.because字典 hase沒有名爲'controller'或'action'的屬性。 –