¿Cómo obtener el parámetro de cadena de consulta del marcado MVC Razor?


81

Quiero verificar el parámetro de URL en mi marcado de Razor. Por ejemplo, ¿cómo hago algo como esto?

<div id="wrap" class="@{if (URL "IFRAME" PARAMETER EQUALS 1) iframe-page}">

Respuestas:


120

Hilo similar

<div id="wrap" class=' @(ViewContext.RouteData.Values["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>

EDITAR 01-10-2014: Dado que esta pregunta es tan popular, esta respuesta se ha mejorado.

El ejemplo anterior solo obtendrá los valores de RouteData, por lo tanto, solo de las cadenas de consulta que son capturadas por alguna ruta registrada. Para obtener el valor de la cadena de consulta, debe llegar al actual HttpRequest. La forma más rápida es llamando (como señaló TruMan) `Request.Querystring ', por lo que la respuesta debería ser:

<div id="wrap" class=' @(Request.QueryString["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>

También puede verificar RouteValues ​​vs QueryString MVC?

EDITAR 05-03-2019: La solución anterior funciona para .NET Framework.
Como otros señalaron, si desea obtener el valor de la cadena de consulta en .NET Core , debe usar el Queryobjeto de la Context.Requestruta. Entonces sería:

<div id="wrap" class=' @(Context.Request.Query["iframe"] == new StringValues("1") ? /*do sth*/ : /*do sth else*/')> </div>

Tenga en cuenta que estoy usando StringValues("1")en la declaración porque Querydevuelve StringValuesestructura en lugar de pura string. Ese es el camino más limpio para este escenario que he encontrado.


7
Gracias por las pistas. Esto funcionó: <div id = "wrap" class = "@ (Request.QueryString [" iframe "] ==" 1 "?" Iframe ": string.Empty)">
TruMan1

1
Agregaría el comentario de @ TruMan1 a su respuesta. En mi caso, los valores no estaban en los datos de la ruta (usando nop-commerce) pero eran accesibles a través de la solicitud.
Ian

Para aclarar, usaría Request.QueryString, por ejemplo, si la vista se muestra como consecuencia de una redirección
Chris Halcrow

Es posible que desee agregar que a partir de .NET Core 2.1 necesita cambiar ContextaHttpContext
Iván García Topete

34

Si está utilizando .net core 2.0, esto sería:

Context.Request.Query["id"]

Uso de muestra:

<a href="@Url.Action("Query",new {parm1=Context.Request.Query["queryparm1"]})">GO</a>

3
Esto da 'El nombre Contexto no existe en el contexto actual'. Sin embargo, el uso de Request.Query ["queryparm1"] funciona.
x5657

1
@ x5657 deberías publicar tu comentario como respuesta, ¡ya que fue la única solución que realmente funcionó para mí!
Jpsy

11

Se sugirió publicar esto como una respuesta, porque algunas otras respuestas dan errores como 'El nombre Contexto no existe en el contexto actual'.

Solo usando los siguientes trabajos:

Request.Query["queryparm1"]

Uso de muestra:

<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>

2
Eso no funcionó para mí, pero esto sí: Request.QueryString
TroySteven

8

Ninguna de las respuestas funcionó para mí, estaba obteniendo "'HttpRequestBase' no contiene una definición para 'Consulta'", pero esto funcionó:

HttpContext.Current.Request.QueryString["index"]

5

Creo que una solución más elegante es usar el controlador y el diccionario ViewData:

//Controller:
public ActionResult Action(int IFRAME)
    {
        ViewData["IsIframe"] = IFRAME == 1;
        return View();
    }

//view
@{
    string classToUse = (bool)ViewData["IsIframe"] ? "iframe-page" : "";
   <div id="wrap" class='@classToUse'></div>
 }

3
Esta vista se comparte entre muchos controladores. Creo que esto se complicaría si lo hiciera así en lugar de poner la lógica directamente en el marcado de Razor. También anticipo que también tendré que hacer esto en vistas parciales.
TruMan1

Una solución más elegante es devolverlo como parte de un ViewModel return View(new SomeViewModel{ IsIFrame = IFrame });
Jose Capistrano

1

Para Asp.net Core 2

ViewContext.ModelState["id"].AttemptedValue

Voy a añadir que aunque se dice AttempValue- si el parametro no existe en la cadena de consulta obtendrá una excepción por lo que primero debe comprobar:@if (ViewContext.ModelState["id"] != null)...
adinas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.