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}">
fuente
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}">
<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.
ContextaHttpContextSi 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>fuente
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>fuente
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"]fuente
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> }fuente
return View(new SomeViewModel{ IsIFrame = IFrame });Para Asp.net Core 2
ViewContext.ModelState["id"].AttemptedValuefuente
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)...