2010-01-11 6 views
5

J'ai une action en prenant deux: GUIDsASP.NET MVC routage deux GUIDs

public class MyActionController : Controller 
{ 
    //... 

    public ActionResult MoveToTab(Guid param1, Guid param2) 
    { 
    //... 
    } 
} 

Je voudrais l'URI suivante à la carte à l'action:

/myaction/movetotab/1/2 

... avec 1 correspondant à param1 et 2 à param2. A quoi ressemblera l'itinéraire, et est-il possible de mapper les arguments aux paramètres avec un type de Guid?

Répondre

7

Oui, il est possible de cartographier vos paramètres System.Guid

routes.MapRoute(
    "MoveToTab", 
    "{controller}/{action}/{param1}/{param2}", 
    new { controller = "MyAction", action = "MoveToTab", 
     param1 = System.Guid.Empty, param2 = System.Guid.Empty } 
); 

ou

routes.MapRoute(
    "MoveToTab2", 
    "myaction/movetotab/{param1}/{param2}", 
    new { controller = "MyAction", action = "MoveToTab", 
     param1 = System.Guid.Empty, param2 = System.Guid.Empty } 
); 
+0

vérifiez vos paramètres ... Je pense que le second devrait être param2 pas param1. –

+0

Merci, cela devrait être param2 –

+0

Est-ce que cela fonctionne parce que Guid prend une chaîne comme paramètre dans l'une de ses surcharges de constructeur, ou est-ce que le framework MVC convertit la chaîne entrante de l'URL en un Guid? Ce processus fonctionnera-t-il pour n'importe quel objet? –

3

Vous pouvez prendre vos deux GUIDs sous forme de chaînes, et les convertir en GUID réel des objets en utilisant le GUID constructeur qui accepte une valeur de chaîne. Utilisez l'itinéraire fourni par eu-ge-ne.

routes.MapRoute(
    "MoveToTab", 
    "myaction/movetotab/{param1}/{param2}", 
    new { controller = "MyAction", action = "MoveToTab", param1 = "", param2 = "" } 
); 

    public ActionResult MoveToTab(string param1, string param2) 
    { 
    Guid guid1 = new Guid(param1); 
    Guid guid2 = new Guid(param2); 
    }