95 votes

Comment obtenir un paramètre de chaîne de requête à partir du balisage MVC Razor ?

Je veux vérifier le paramètre URL dans mon balisage Razor. Par exemple, comment puis-je faire quelque chose comme ceci :

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

147voto

Mariusz Points 871

Fil conducteur similaire

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

MODIFIER 01-10-2014 : Cette question étant très populaire, la réponse a été améliorée.

L'exemple ci-dessus ne récupère que les valeurs de RouteData donc uniquement à partir des chaînes de requête qui sont capturées par une route enregistrée. Pour obtenir la valeur de la chaîne d'interrogation, vous devez accéder à l'adresse actuelle de l'utilisateur. HttpRequest . Le moyen le plus rapide est d'appeler (comme TruMan l'a souligné) `Request.Querystring' donc la réponse devrait être :

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

Vous pouvez également vérifier RouteValues vs QueryString MVC ?

MODIFIER 03-05-2019 : La solution ci-dessus fonctionne pour .NET Framework.
Comme d'autres l'ont fait remarquer, si vous souhaitez obtenir la valeur de la chaîne de requête dans le champ .NET Core vous devez utiliser Query l'objet de Context.Request chemin. Donc ça le serait :

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

Veuillez noter que j'utilise StringValues("1") dans la déclaration parce que Query renvoie à StringValues struct au lieu d'un pur string . C'est le moyen le plus propre que j'ai trouvé pour ce scénario.

40voto

Florian Schaal Points 1262

Si vous utilisez .net core 2.0, ce serait :

Context.Request.Query["id"]

Exemple d'utilisation :

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

14voto

x5657 Points 371

Il a été suggéré de publier cette réponse, car certaines autres réponses donnent des erreurs telles que "Le nom Contexte n'existe pas dans le contexte actuel".

Il suffit d'utiliser ce qui suit :

Request.Query["queryparm1"]

Exemple d'utilisation :

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

9voto

Rolando Retana Points 343

Aucune des réponses n'a fonctionné pour moi, j'ai obtenu "'HttpRequestBase' ne contient pas de définition pour 'Query'", mais ceci a fonctionné :

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

6voto

Alper Ebicoglu Points 2977

pour ASP.NET Core 5.0

Vous pouvez obtenir des paramètres de requête en injectant IHttpContextAccessor dans la page Razor. Et obtenez la valeur de n'importe quel paramètre avec Request.Query objet.

Exemple d'URL => https://localhost:44326/?MyParam=MyValue

Index.cshtml :

@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor

<span>@HttpContextAccessor.HttpContext.Request.Query["MyParam"][0]</span>

Notez qu'il peut y avoir plusieurs paramètres de requête avec le même nom, donc les valeurs sont stockées dans une collection.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X