В ASP.NET MVC вы должны выбрать параметры QueryString так же, как в ASP.NET WebForms? или используется какое-либо объявление [AcceptVerbs (HttpVerbs.Get)]?
ASP.NET MVC - получение значений QueryString
Ответ 1
Параметры строки запроса могут быть приняты просто с помощью аргумента в действии - i.e.
public ActionResult Foo(string someValue, int someOtherValue) {...}
который примет запрос, например... /someroute? someValue = abc & someOtherValue = 123
Кроме этого, вы можете посмотреть запрос непосредственно для большего контроля.
Ответ 2
Вы всегда можете использовать коллекцию Request.QueryString
, такую как веб-формы, но вы также можете заставить MVC обрабатывать их и передавать их в качестве параметров. Это проще всего предложить, и он автоматически проверяет тип входных данных.
Ответ 3
Я думаю, что вы ищете
Request.QueryString["QueryStringName"]
и вы можете получить к нему доступ по просмотрам, добавив @
Теперь посмотрим на мой пример,, я сгенерировал Url с QueryString
var listURL = '@Url.RouteUrl(new { controller = "Sector", action = "List" , name = Request.QueryString["name"]})';
значение listURL равно /Sector/List?name=value'
и когда queryString
пусто
Значение listURL /Sector/List
Ответ 4
Я рекомендую использовать свойство ValueProvider контроллера, в основном так, как это делает UpdateModel/TryUpdateModel для извлечения необходимых параметров маршрута, запроса и формы. Это приведет к тому, что подписи ваших методов будут расти очень большими и будут подвержены частым изменениям. Это также облегчает тестирование, так как вы можете поставить ValueProvider на контроллер во время модульных тестов.
Ответ 5
На самом деле вы можете захватывать строки запроса в MVC двумя способами.....
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);
}
Это приведет к захвату обеих строк запроса... например:
/CrazyMVC?knownQuerystring=123&unknownQuerystring=456
Output: 123 - 456
Не спрашивайте меня, почему они так его спроектировали. Было бы более разумно, если бы они выбросили всю систему действий Controller для отдельных строк запросов и просто вернули захваченный динамический список всех строк/закодированных файловых объектов для URL-адреса с помощью кодировки url-формы, чтобы вы могли легко получить к ним доступ за один раз, Может быть, кто-то здесь может продемонстрировать, что, если это возможно?
Не имеет для меня никакого смысла, как контролеры захватывают строки запросов, но это означает, что у вас больше гибкости для захвата строк запроса, чем они учат вас из коробки. Так что заберите свой яд.... оба отлично работают.