2010-01-25 4 views
1

Existe-t-il un moyen d'avoir plusieurs actions avec différents paramètres? Je l'ai vu en utilisant le drapeau des verbes HttpPost, mais cela ne semble pas fonctionner pour moi dans d'autres endroits.Actions ambiguës

La demande d'action actuelle List sur le type de contrôleur FoldersController` est ambiguë entre les méthodes d'action suivantes.

public ActionResult List() 
{ 
//... 
} 

public ActionResult List(DateTime start) 
{ 
// ... 
} 

public ActionResult List(string key) 
{ 
// .... 
} 

Essayer cette route paramter j'ai trouvé sur ...

Je suis encore un peu confus sur le fonctionnement de routage. C'est ce que j'ai jusqu'ici. ASP.NET MVC Routing Via Method Attributes

Mais je reçois toujours l'erreur ambiguë. Cela n'a pas beaucoup de sens pour moi - ce sont deux routes entièrement différentes - il devrait savoir exactement qu'ActionResult appelle. Mais il ne le fait pas ...

[UrlRoute(Path = "List/Days/{days}")] 
    [UrlRouteParameterConstraint(Name = "days", Regex = @"\d+")] 
    public PartialViewResult List(int days) 
    { 
     return PartialView("List", Folders.List()); 
    } 

    [UrlRoute(Path = "List/Rings/{ring}")] 
    [UrlRouteParameterDefault(Name = "ring", Value = "all")] 
    public PartialViewResult List(string ring) 
    { 
     return PartialView("List", Folders.List()); 
    } 
+0

En ce qui concerne l'UrlRoute 1) N'en aie pas envie 2) appelez-vous les informations d'enregistrement de route fournies par la bibliothèque (cela expliquerait que cela ne fonctionne pas)? –

+0

// enregistrer d'autres routes à partir de leurs attributs. \t \t \t RouteUtility.RegisterUrlRoutesFromAttributes (routes); dans le fichier global.asax. – Ciel

+0

Je ne suis pas sûr de ce que vous entendez par «appeler les choses d'enregistrement de route que la bibliothèque fournit». J'essaie de comprendre comment mapper l'itinéraire directement à partir de la méthode registerroutes, juste un lent voyage pour y arriver ... – Ciel

Répondre

1

Vous devez donner les informations suffisamment mécanisme de routage de demande pour être en mesure de choisir que l'on applique non ambigüe, par exemple, en fournissant un motif regex dans l'enregistrement d'itinéraire et ayant ce filtre certaines des demandes dans une autre action que vous appelez ListByDate.

Mais en général, si des choses commence à devenir source de confusion pour le programme, ti'll être source de confusion à utiliser: - http://odetocode.com/Blogs/scott/archive/2010/01/25/kiss-your-asp-net-mvc-routes.aspx

donc une autre approche qui évite d'avoir à concocter regexes désambiguïser la date vs actions « de tout le reste » via un regex est d'avoir un système de routage: -

  • /par jour/aa-mm-jj
  • /par-clé/clé
+0

Je ne suis pas sûr de ce que vous voulez dire. Comment puis-je pointer vers la méthode appropriée avec l'expression rationnelle? – Ciel

+0

@Stacey. dans votre 'routes.MapRoute' vous ajouteriez' action = "ListByDate" ', puis renommez votre Action en ce nom ou placez-y un attribut pour dire" J'implémente cet alias d'action ". Mais vous devez avoir une regex qui correspond à la façon dont la liaison DateTime [model] fonctionne normalement, ce qui est difficile à faire proprement. –

+0

Quelque chose de similaire serait-il sage? http://stackoverflow.com/questions/894779/asp-net-mvc-routing-via-method-attributes – Ciel

1

Puisque vous n'a pas le AcceptVerbs défini, il ne peut pas comprendre quelle méthode appeler. Pouvez-vous clarifier "cela ne semble pas fonctionner pour moi dans d'autres endroits"?

+0

L'anglais est en effet ambigu. J'ai interprété la déclaration comme si j'essayais de dire "Je sais que vous pouvez utiliser AcceptVerb pour désambiguïser et c'est normalement bien, dans ce cas ça n'aide pas [comme je veux lier les deux à GET]" –