web-dev-qa-db-fra.com

Qu'est-ce que Routedata.Values ​​[""]?

Je suis surpris de voir qu'aucun article ne répond à cette question avec des détails. J'ai quelques questions concernant RouteData.Values[""].

J'ai vu ce code:

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

    return View();
}

Ici, il s'agit essentiellement de lire des valeurs qui peuvent potentiellement ressembler à des "métadonnées" du contrôleur. Ou est-ce quelque chose que View peut également transmettre au contrôleur?

16
Lost

RouteData.Values ​​est utilisé pour accéder aux valeurs/valeurs de chaîne de requête insérées par les classes gérant le routage.
Dans votre cas, la route définie dans votre classe de configuration de route a des paramètres supplémentaires auxquels des arguments auraient été fournis.
Les paramètres sont contrôleur, action, id.
Les arguments de ces paramètres auraient été fournis quelque part dans votre code.

Cela a plus de sens lorsque vous commencez quelques niveaux plus haut, donc vous savez ce que vous recherchez.

  1. The Global.asax.cs

    protected void Application_Start(object sender, EventArgs e)
    {
        routingActions.RegisterCustomRoutes(RouteTable.Routes);
    }
    
  2. Une autre classe définit la méthode ci-dessus:

    public void RegisterCustomRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("searchdetails", "searchdetails/{orderID}/{PageIndex}/{PageSize}", "~/View/SearchDetails.aspx");
    }
    
  3. Le code suivant crée un lien hypertexte. La principale différence est la façon dont le HREF est construit. Dans ce cas, le "searchdetails" est défini dans la classe qui contient ma configuration d'itinéraire.

    linkToDetails.HRef = GetRouteUrl("searchdetails",
                    new
                    {
                        orderID = someOrderID,
                        PageIndex = currentPageIndex,
                        PageSize = PageSize
                    });
    
  4. Enfin, la page cible doit utiliser ces informations passées à l'étape 3. C'est là que nous utilisons 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"]);
    }
    
18
pkamathk

RouteData est un attribut de la classe Controller de base, vous pouvez donc accéder à RouteData dans n'importe quel contrôleur. RouteData contient des informations de routage pour la demande actuelle. Vous pouvez utiliser RouteData pour obtenir des informations sur le contrôleur, le fonctionnement ou les paramètres, comme indiqué ci-dessous.

Notez que vous devez convertir le type de données approprié ou utiliser la variable de type implicite var.

4
BGC