Подтвердить что ты не робот

Как получить параметр строки запроса из разметки MVC Razor?

Я хочу проверить параметр URL в моей разметке Razor. Например, как мне сделать что-то вроде этого:

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

Ответ 1

Подобная тема

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

РЕДАКТИРОВАТЬ 01-10-2014: Поскольку этот вопрос настолько популярен, этот ответ был улучшен.

В приведенном выше примере получаются только значения из RouteData, то есть только из строк RouteData, которые перехватываются каким-либо зарегистрированным маршрутом. Чтобы получить значение строки запроса, вы должны перейти к текущему HttpRequest. Самый быстрый способ - вызвать (как указал TruMan) "Request.Querystring", поэтому ответ должен быть:

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

Вы также можете проверить RouteValues против QueryString MVC?

РЕДАКТИРОВАТЬ 03-05-2019: вышеуказанное решение работает для .NET Framework.
Как отмечали другие, если вы хотите получить значение строки запроса в .NET Core, вы должны использовать объект Query из пути Context.Request. Так было бы:

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

Обратите внимание, что я использую StringValues("1") в выражении, потому что Query возвращает объект StringValues вместо чистой string. Это очищает путь для этого сценария, который я нашел.

Ответ 2

Если вы используете .net core 2.0, это будет:

Context.Request.Query["id"]

Пример использования:

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

Ответ 3

Я думаю, что более элегантным решением является использование контроллера и словаря 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>
 }

Ответ 4

Было предложено опубликовать это как ответ, потому что некоторые другие ответы приводят к ошибкам типа "Контекст имени не существует в текущем контексте".

Просто с помощью следующих работ:

Request.Query["queryparm1"]

Пример использования:

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

Ответ 5

Ни один из ответов не сработал для меня, я получал "HttpRequestBase" не содержит определения "Query", но это сработало:

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

Ответ 6

Для Asp.net Core 2

ViewContext.ModelState["id"].AttemptedValue