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:
<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 Query
objeto de la Context.Request
ruta. 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 Query
devuelve StringValues
estructura en lugar de pura string
. Ese es el camino más limpio para este escenario que he encontrado.
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>
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>
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"]
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>
}
return View(new SomeViewModel{ IsIFrame = IFrame });
Para Asp.net Core 2
ViewContext.ModelState["id"].AttemptedValue
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)...