ASP.NET MVC – Obtención de valores de QueryString

En ASP.NET MVC, ¿se supone que debes elegir los parámetros QueryString de la misma forma que lo haces en ASP.NET WebForms? o la [AcceptVerbs(HttpVerbs.Get)] se usa de alguna manera?

Los parámetros de cadena de consulta se pueden aceptar simplemente mediante el uso de un argumento en la acción, es decir,

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

que aceptará una consulta como .../someroute?someValue=abc&someOtherValue=123

Aparte de eso, puede ver la solicitud directamente para obtener más control.

Siempre puede usar la colección Request.QueryString como formularios web, pero también puede hacer que MVC los maneje y los pase como parámetros. Esta es la forma sugerida, ya que es más fácil y validará el tipo de datos de entrada automáticamente.

Creo que lo que estás buscando es

 Request.QueryString["QueryStringName"] 

y puede acceder a él en las vistas agregando @

ahora mira mi ejemplo ,,, he generado una URL con QueryString

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

el valor listURL es /Sector/List?name=value'

y cuando queryString está vacío

el valor de listURL es /Sector/List

Recomiendo usar la propiedad ValueProvider del controlador, de forma muy parecida a lo que hace UpdateModel / TryUpdateModel para extraer la ruta, la consulta y los parámetros de formulario necesarios. Esto evitará que sus firmas de métodos crezcan demasiado y que estén sujetos a cambios frecuentes. También hace que sea un poco más fácil de probar ya que puede suministrar un ValueProvider al controlador durante las pruebas unitarias.

En realidad, puede capturar cadenas de consulta en MVC de dos maneras …

 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); } 

Esto capturaría ambas cadenas de consulta … por ejemplo:

 /CrazyMVC?knownQuerystring=123&unknownQuerystring=456 Output: 123 - 456 

No me preguntes por qué lo diseñaron de esa manera. Tendría más sentido si eliminaran todo el sistema de acción del Controlador para cadenas de consulta individuales y simplemente devolvieran una lista dinámica capturada de todas las cadenas / objetos de archivos codificados para la URL mediante la encoding url-form para que pueda acceder fácilmente a todas ellas en una sola llamada . Tal vez alguien aquí puede demostrar que si es posible?

No tiene sentido para mí cómo los Controladores capturan cadenas de consulta, pero sí significa que tiene más flexibilidad para capturar cadenas de consulta de lo que le enseñan de la caja. Así que elige tu veneno … ambos funcionan bien.