Вопрос по razor, asp.net, c#, asp.net-mvc, asp.net-mvc-4 – Как получить параметр строки запроса из разметки MVC Razor?

58

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

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

Ваш Ответ

6   ответов
16

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

Context.Request.Query["id"]

Sample usage:

<a href="@Url.Action("Query",new {parm1=Context.Request.Query["queryparm1"]})">GO</a>
@ x5657 вы должны оставить свой комментарий в качестве ответа, так как это единственное решение, которое действительно работает для меня!
Готово. Рад, что это сработало для вас!
Это дает «имя контекста не существует в текущем контексте». Просто использование Request.Query [& quot; queryparm1 & quot;] работает.
0

Для Asp.net Core 2

ViewContext.ModelState["id"].AttemptedValue
5

Я думаю, что более элегантным решением является использование контроллера и словаря 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>
 }
Более элегантное решение - вернуть его как часть ViewModel.return View(new SomeViewModel{ IsIFrame = IFrame });
Я так не думаю
Это представление используется многими контроллерами. Я думаю, что было бы грязно делать это так, вместо того, чтобы помещать логику прямо в разметку Razor. Также я ожидаю, что мне, возможно, придется сделать это и в частичных взглядах. TruMan1
5

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

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

Request.Query["queryparm1"]

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

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

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

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

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

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

EDIT 01-10-2014: Поскольку этот вопрос настолько популярен, этот ответ был улучшен.

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

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

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

Чтобы уточнить - вы используете Request.QueryString, например, если представление отображается в результате перенаправления
@Ian отвечаю обновленное спасибо за подсказку.
Я бы добавил комментарий @ TruMan1 к вашему ответу. В моем случае значения не были в данных маршрута (используя nop-commerce), но были доступны через запрос.
Спасибо за подсказки. Это сработало: & lt; div id = & quot; wrap & quot; class = & quot; @ (Request.QueryString [& quot; iframe & quot;] == & quot; 1 & quot;? & quot; iframe & quot;: string.Empty) & got; TruMan1

Похожие вопросы