2009-03-09 3 views

Odpowiedz

80

parametry ciągu zapytań może być przyjęty po prostu za pomocą argumentu w sprawie działań - tj

public ActionResult Foo(string someValue, int someOtherValue) {...} 

który zaakceptuje zapytanie jak .../someroute someValue = abc & someOtherValue = 123

? Poza tym możesz spojrzeć na prośbę bezpośrednio, aby uzyskać większą kontrolę.

24

Zawsze można użyć kolekcji Request.QueryString, takiej jak formularze internetowe, ale można również ustawić obsługę MVC i przekazać je jako parametry. Jest to sugerowany sposób, ponieważ jest łatwiejszy i automatycznie sprawdzi poprawność typu danych wejściowych.

7

Zalecam użycie właściwości ValueProvider kontrolera, podobnie jak UpdateModel/TryUpdateModel, aby wyodrębnić wymagane parametry trasy, zapytania i formularza. Dzięki temu sygnatury Twoich metod będą mogły rosnąć bardzo często i ulegać częstym zmianom. Ułatwia to również testowanie, ponieważ możesz dostarczyć dostawcę wartości do kontrolera podczas testów jednostkowych.

14

myślę co szukasz jest

Request.QueryString["QueryStringName"] 

i można uzyskać do niego dostęp w widokach dodając @

teraz spojrzeć na moim przykładzie ,,, ja generowane URL z QueryString

var listURL = '@Url.RouteUrl(new { controller = "Sector", action = "List" , name = Request.QueryString["name"]})'; 

wartość listURL jest /Sector/List?name=value'

i kiedy queryString jest pusty

wartość listURL jest /Sector/List

0

Właściwie można uchwycić ciągów zapytań w MVC na dwa sposoby .....

public ActionResult CrazyMVC(string knownQuerystring) 
{ 

    // This is the known query string captured by the Controller Action Method parameter above 
    string myKnownQuerystring = knownQuerystring; 

    // This is what I call the mysterious "unknown" query string 
    // It is not known because the Controller isn't capturing it 
    string myUnknownQuerystring = Request.QueryString["unknownQuerystring"]; 

    return Content(myKnownQuerystring + " - " + myUnknownQuerystring); 

} 

byłoby to uchwycić oba ciągi zapytań ... na przykład:

/CrazyMVC?knownQuerystring=123&unknownQuerystring=456 

Output: 123 - 456 

Nie pytaj mnie, dlaczego zaprojektowali go w ten sposób. Miałoby to więcej sensu, gdyby wyrzucił cały system akcji kontrolera dla pojedynczych ciągów zapytań i właśnie zwrócił przechwyconą dynamiczną listę wszystkich łańcuchów/zakodowanych obiektów dla adresu URL za pomocą kodowania adresu URL, dzięki czemu można łatwo uzyskać do nich dostęp w jednym wywołaniu . Może ktoś tutaj może wykazać, że jeśli to możliwe?

Nie ma dla mnie żadnego sensu, w jaki sposób kontrolery przechwytują ciągi zapytań, ale oznacza to, że masz większą elastyczność w przechwytywaniu ciągów zapytań niż uczą cię po wyjęciu z pudełka. Więc wybierz swoją truciznę ... obie działają dobrze.