Pod ASP.NET MVC należy odbierać parametry QueryString w taki sam sposób, jak w ASP.NET WebForms? lub czy deklaracja [AcceptVerbs (HttpVerbs.Get)] zostanie jakoś wykorzystana?ASP.NET MVC - Uzyskiwanie wartości QueryString
Odpowiedz
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ę.
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.
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.
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
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.