it-swarm.com.de

Verwenden Sie im MVC-Controller Query-String-Variablen

Ich bin neu in C # .net MVC und versuche, einer MVC-Anwendung FullCalendar hinzuzufügen. 

Das FullCalendar-Skript fügt automatisch ?start={}&end={} zur URL hinzu ... was in Ordnung ist, aber ich habe keine Ahnung, wie man querystring-Variablen in einem Controller verwendet.

Die in Webforms-Anwendungen verwendeten Methoden funktionieren nicht. Was muss ich zum Controller hinzufügen, um auf die Variablen querystring zugreifen zu können?

44
davids
public ActionResult SomeAction(string start, string end)

Das Framework ordnet die Abfragezeichenfolgeparameter den Methodenparametern zu. 

78
Maess

Ich habe es herausgefunden ... endlich einen anderen Artikel drauf.

string start = Request.QueryString["start"];

string end = Request.QueryString["end"];
67
davids

Davids, ich hatte genau das gleiche Problem wie Sie. MVC ist nicht intuitiv und es scheint, als hätten die Kiddos den Zweck oder die Bedeutung eines intuitiven Querystringsystems für MVC nicht verstanden.

Querringe werden in den Routen überhaupt nicht gesetzt (RouteConfig). Sie sind zusätzliche Parameter für Aktionen in der Steuerung. Dies ist sehr verwirrend, da die Action-Parameter für BEIDE Pfade UND Querstrings ausgelegt sind. Wenn Sie Parameter hinzugefügt haben und sie nicht funktionierten, fügen Sie einen zweiten für die Abfragestringfolge hinzu:

Dies wäre Ihre Aktion in Ihrer Controller-Klasse, die die ID abfängt (was eigentlich nur ein Pfad ist, der in Ihrer RouteConfig-Datei als typischer Standardpfad in MVC festgelegt ist):

public ActionResult Hello(int id)

Um Querystrings abzufangen, muss jedoch ein zusätzlicher Parameter in Ihrem Controller hinzugefügt werden (der NICHT in Ihrer RouteConfig-Datei festgelegt ist):

public ActionResult Hello(int id, string start, string end)

Dies hört jetzt auf "/ Hello? Start = & end =" oder "/ Hello /? Start = & end =" oder "/ Hello/45? Start = & end =", sofern die "id" in der RouteConfig.cs auf optional gesetzt ist Datei.

Wenn Sie in der RouteConfig-Datei eine "benutzerdefinierte Route" erstellen möchten, die keinen "id" -Pfad hat, können Sie nach der Aktion in dieser Datei die "id" oder einen anderen Parameter weglassen. In diesem Fall würden Ihre Parameter in Ihrer Action-Methode im Controller nur Abfragezeichenfolgen verarbeiten.

Ich fand das extrem verwirrend, also bist du nicht alleine! Sie sollten eine einfache Methode zum Hinzufügen von Querystring-Routen für bestimmte benannte Zeichenfolgen, einen beliebigen Querystringnamen und eine beliebige Anzahl von Querystringen im Konfigurationsdesign der RouteConfig-Datei enthalten. Wenn dies nicht getan wird, bleibt die Verwendung von Querystrings in MVC-Webanwendungen als fragwürdig, was ziemlich bizarr ist, da Querystrings seit Mitte der 1990er Jahre ein stabiler Bestandteil des World Wide Web sind. :(

2
Stokely

Mein Problem bestand darin, meine Abfragezeichenfolgeparameter mit Standardwerten zu überschreiben:

routes.MapRoute(
    "apiRoute", 
    "api/{action}/{key}", 
    new { controller = "Api", action = "Prices", key = ""}
);

Egal was ich in die Abfragezeichenfolge einsteckte oder wie nur key="" resultiert.

Dann wurden die Standard-Überschreibungen mit UrlParameter entfernt. Option:

routes.MapRoute(
    "apiRoute", 
    "api/{action}/{key}", 
    new { controller = "Api", action = "Prices", key = UrlParameter.Optional }
);

jetzt 

prices/{key} 

oder

prices?key={key} 

beide funktionieren gut.

1
spugna

Hier ist was ich mir ausgedacht habe. Ich hatte große Probleme damit und glaube, dass ich jetzt in MVC 6 bin, aber dies kann für jemanden selbst in der Zukunft hilfreich sein.

// Das Problem war, dass Reqest.Form Request.Querystring und Request nicht in MVC funktionieren. Die Lösung besteht darin, Context.Request.Form zu verwenden und sicherzustellen, dass das Formular übermittelt wurde.

     if(Context.Request.ContentLength != null)
     {
         String StartDate = Context.Request.Form["StartMonth"].ToString();
         String EndMonth = Context.Request.Form["EndMonth"].ToString();
        // Vendor

     }
0
Deathstalker