2012-04-12 16 views
4

Statt {controller}/{action}/{id} ist es möglich, mehrere Parameter wie {controller}/{action}/{id}/{another id} zu haben?MVC 4: Mehrere Controller Aktionsparameter

Ich bin neu in MVC (von nur einfachen Webseiten kommend). Wenn nicht möglich, bietet MVC eine Hilfsmethode wie die in Webseiten verfügbare UrlData?

Antwort

4

Sie brauchen nur die neue Route in Ihrer global.asax auf der Karte, wie folgt aus:

routes.MapRoute(
    "NewRoute", // Route name 
    "{controller}/{action}/{id}/{another_id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional, another_id = UrlParameter.Optional } // Parameter defaults 
); 

Dann in Aktion Ihrer Steuerung der Parameter wie diese abholen können:

public ActionResult MyAction(string id, string another_id) 
{ 
    // ... 
} 
+1

sollten Sie diese erste ID Ihre Aktion-Methode Parameterliste hinzu: public Action MyAction (string id, string another_id), so dass beide ids durch Verwendung die Beispielaktion. – Tommy

+0

@Tommy Danke, aktualisiert – McGarnagle

+1

Ich habe dies auf IIS Express und volle IIS 7 versucht, aber Error 404.0 mit einem 2. Parameter. Ich versuchte, http://www.asp.net/mvc/tutorials/older-versions/deployment/using-asp-net-mvc-with-different-versions-of-iis-cs zu lesen, aber nichts half. Irgendwelche Vorschläge? – DavidHyogo

3

Ja, Sie können mehrere Parameter in einer Route definieren. Sie müssen zuerst Ihre Route in Ihrer Global.asax-Datei definieren. Sie können Parameter in URL-Segmenten oder in Teilen von URL-Segmenten definieren. So verwenden Sie Ihr Beispiel können Sie eine Route als

{controller}/{action}/{id1}/{id2} 

die MVC-Infrastruktur definieren dann analysieren Routen passend zu den ID1 und ID2 Segmente zu extrahieren und ordnen sie den entsprechenden Variablen in der Aktionsmethode:

public class MyController : Controller 
{ 
    public ActionResult Index(string id1, string id2) 
    { 
    //.. 
    } 
} 

Alternativ können Sie auch Eingabeparameter aus Abfragezeichenfolgen oder Formularvariablen akzeptieren. Zum Beispiel:

MyController/Index/5?id2=10 

Routing wird ausführlicher diskutiert here

Verwandte Themen