Подтвердить что ты не робот

ASP.NET MVC - получение значений QueryString

В ASP.NET MVC вы должны выбрать параметры QueryString так же, как в ASP.NET WebForms? или используется какое-либо объявление [AcceptVerbs (HttpVerbs.Get)]?

4b9b3361

Ответ 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-формы, чтобы вы могли легко получить к ним доступ за один раз, Может быть, кто-то здесь может продемонстрировать, что, если это возможно?

Не имеет для меня никакого смысла, как контролеры захватывают строки запросов, но это означает, что у вас больше гибкости для захвата строк запроса, чем они учат вас из коробки. Так что заберите свой яд.... оба отлично работают.