2015-03-03 6 views
13

Ich bin überrascht zu sehen, dass es keinen Artikel gibt, der diese Frage mit irgendwelchen Details beantwortet. Ich habe einige Fragen im Zusammenhang mit RouteData.Values[""].Was ist Routedata.Values ​​[""]?

habe ich diesen Code:

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

    return View(); 
} 

Hier ist es im Grunde Werte, die möglicherweise klingen wie „Meta-Daten“ der Steuerung zu lesen. Oder kann View auch an den Controller übergeben werden?

Antwort

14

RouteData.Values ​​wird für den Zugriff auf Werte/querystring-Werte verwendet, die von den Routing-Klassen eingefügt wurden.
In Ihrem Fall hat die Route, die in Ihrer Routenkonfigurationsklasse definiert ist, zusätzliche Parameter, für die Argumente bereitgestellt wurden.
Die Parameter sind Controller, Aktion, ID.
Die Argumente für diese Parameter wären irgendwo in Ihrem Code angegeben worden.

Es macht mehr Sinn, wenn Sie ein paar Stufen höher starten, damit Sie wissen, wonach Sie suchen.

  1. Die Global.asax.cs

    protected void Application_Start(object sender, EventArgs e) 
    { 
        routingActions.RegisterCustomRoutes(RouteTable.Routes); 
    } 
    
  2. andere Klasse definiert die obige Methode:

    public void RegisterCustomRoutes(RouteCollection routes) 
    { 
        routes.MapPageRoute("searchdetails", "searchdetails/{orderID}/{PageIndex}/{PageSize}", "~/View/SearchDetails.aspx"); 
    } 
    
  3. Der folgende Code einen Hyperlink erzeugt. Der Hauptunterschied ist die Art, wie der HREF konstruiert wird. In diesem Fall sind die "Suchdetails" in der Klasse definiert, die meine Routenkonfiguration enthält.

    linkToDetails.HRef = GetRouteUrl("searchdetails", 
           new 
           { 
            orderID = someOrderID, 
            PageIndex = currentPageIndex, 
            PageSize = PageSize 
           }); 
    
  4. Schließlich muss die Zielseite diese Informationen in Schritt übergeben verwenden 3. Dies ist, wo wir RouteData.Values ​​verwenden [ ""]

    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

Warum Page_Load in eine offensichtlich MVC-Anwendung? – Stack0verflow

+0

@ Stack0verflow Wir haben ein ähnliches Setup in einer Webformular-Website. Sie können es tun, es ist nur nicht der Standard (im Gegensatz zu MVC). – Trisped