Я хочу проверить параметр URL в моей разметке Razor. Например, как мне сделать что-то вроде этого:
<div id="wrap" class="@{if (URL "IFRAME" PARAMETER EQUALS 1) iframe-page}">
Я хочу проверить параметр URL в моей разметке Razor. Например, как мне сделать что-то вроде этого:
<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>
РЕДАКТИРОВАТЬ 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
. Это очищает путь для этого сценария, который я нашел.
Если вы используете .net core 2.0, это будет:
Context.Request.Query["id"]
Пример использования:
<a href="@Url.Action("Query",new {parm1=Context.Request.Query["queryparm1"]})">GO</a>
Я думаю, что более элегантным решением является использование контроллера и словаря 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>
}
Было предложено опубликовать это как ответ, потому что некоторые другие ответы приводят к ошибкам типа "Контекст имени не существует в текущем контексте".
Просто с помощью следующих работ:
Request.Query["queryparm1"]
Пример использования:
<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>
Ни один из ответов не сработал для меня, я получал "HttpRequestBase" не содержит определения "Query", но это сработало:
HttpContext.Current.Request.QueryString["index"]
Для Asp.net Core 2
ViewContext.ModelState["id"].AttemptedValue