2015-03-03 28 views
13

Jestem zaskoczony tym, że nie ma artykułu, który odpowie na to pytanie z żadnymi szczegółami. Mam kilka pytań związanych z RouteData.Values[""].Co to jest Routedata.Values ​​[""]?

Widziałem ten kod:

public ActionResult Index() 
{ 
    ViewBag.Message = string.Format("{0}---{1}--{2}", 
     RouteData.Values["Controller"], 
     RouteData.Values["action"], 
     RouteData.Values["id"]); 

    return View(); 
} 

Tutaj to jest w zasadzie odczytu wartości, które potencjalnie brzmi jak „metadane” sterownika. Czy jest to coś, co View może przekazać Kontrolerowi?

Odpowiedz

14

RouteData.Values ​​służy do uzyskiwania dostępu do wartości/kwerendy wartości wstawianych przez routing obsługi klas.
W twoim przypadku trasa zdefiniowana w twojej klasie konfiguracji trasy ma dodatkowe parametry, które zostałyby podane.
Parametry to kontroler, akcja, id.
Argumenty tych parametrów zostałyby podane gdzieś w kodzie.

Ma to więcej sensu, gdy zaczynasz o kilka poziomów wyżej, więc wiesz, czego szukasz.

  1. Global.asax.cs

    protected void Application_Start(object sender, EventArgs e) 
    { 
        routingActions.RegisterCustomRoutes(RouteTable.Routes); 
    } 
    
  2. Inna klasa określa powyższy sposób:

    public void RegisterCustomRoutes(RouteCollection routes) 
    { 
        routes.MapPageRoute("searchdetails", "searchdetails/{orderID}/{PageIndex}/{PageSize}", "~/View/SearchDetails.aspx"); 
    } 
    
  3. Następujący kod tworzy łącza. Główną różnicą jest sposób konstruowania HREF. W tym przypadku "wyniki wyszukiwania" są zdefiniowane w klasie, która zawiera moją konfigurację trasy.

    linkToDetails.HRef = GetRouteUrl("searchdetails", 
           new 
           { 
            orderID = someOrderID, 
            PageIndex = currentPageIndex, 
            PageSize = PageSize 
           }); 
    
  4. Wreszcie, strona docelowa musi wykorzystywać te informacje przekazywane w kroku 3. To gdzie używamy RouteData.Values ​​[ ""]

    protected void Page_Load(object sender, EventArgs e) 
    { 
        var _orderid = Page.RouteData.Values["orderID"].ToString(); 
        var _PageIndex = Convert.ToInt32(Page.RouteData.Values["PageIndex"]); 
        var _PageSize = Convert.ToInt32(Page.RouteData.Values["PageSize"]); 
    } 
    
+1

Dlaczego w Page_Load oczywiście aplikacja MVC? – Stack0verflow

+0

@ Stack0verflow Mamy podobne ustawienia w witrynie formularzy internetowych. Możesz to zrobić, to po prostu nie jest domyślny (w przeciwieństwie do MVC). – Trisped