2015-03-03 7 views
13

Sono sorpreso di vedere che non esiste un articolo che risponda a questa domanda con alcun dettaglio. Ho alcune domande relative a RouteData.Values[""].Che cos'è Routedata.Values ​​[""]?

ho visto questo codice:

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

    return View(); 
} 

Qui è fondamentalmente la lettura dei valori che potenzialmente suona come "meta-data" del controllore. O è qualcosa che View può anche passare al Controller?

risposta

14

RouteData.Values ​​viene utilizzato per l'accesso ai valori/valori di querystring inseriti dal routing delle classi.
Nel tuo caso, il percorso definito nella classe di configurazione del percorso ha parametri aggiuntivi a cui gli argomenti sarebbero stati forniti.
I parametri sono controller, azione, id.
Gli argomenti per questi parametri sarebbero stati forniti da qualche parte nel codice.

Ha più senso quando si avvia un livello più alto, in modo da sapere cosa si sta cercando.

  1. Il Global.asax.cs

    protected void Application_Start(object sender, EventArgs e) 
    { 
        routingActions.RegisterCustomRoutes(RouteTable.Routes); 
    } 
    
  2. Un'altra classe definisce il metodo di cui sopra:

    public void RegisterCustomRoutes(RouteCollection routes) 
    { 
        routes.MapPageRoute("searchdetails", "searchdetails/{orderID}/{PageIndex}/{PageSize}", "~/View/SearchDetails.aspx"); 
    } 
    
  3. Il codice seguente crea un collegamento ipertestuale. La principale differenza è il modo in cui è costruito l'HREF. In questo caso, "searchdetails" è definito nella classe che contiene la mia configurazione di percorso.

    linkToDetails.HRef = GetRouteUrl("searchdetails", 
           new 
           { 
            orderID = someOrderID, 
            PageIndex = currentPageIndex, 
            PageSize = PageSize 
           }); 
    
  4. Infine, la pagina di destinazione deve utilizzare queste informazioni passate al punto 3. Questo è dove usiamo 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

Perché Page_Load in ovviamente un'applicazione MVC? – Stack0verflow

+0

@ Stack0verflow Abbiamo una configurazione simile in un sito Web di moduli. Puoi farlo, non è solo l'impostazione predefinita (diversamente da MVC). – Trisped