Я хочу перевірити параметр 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>
EDIT 01-10-2014:
Оскільки це питання настільки популярне, цю відповідь вдосконалено.
У наведеному вище прикладі будуть отримані лише значення з RouteData
, тому лише із рядків запитів, які потрапляють за яким-небудь зареєстрованим маршрутом. Щоб отримати значення рядка запиту, вам потрібно дістатися до поточного HttpRequest
. Найшвидший спосіб - це зателефонувати (як зазначив TruMan) `Request.Querystring ', тому відповідь повинна бути такою:
<div id="wrap" class=' @(Request.QueryString["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>
Ви також можете перевірити RouteValues проти QueryString MVC?
EDIT 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
struct замість pure string
. Це чистий спосіб для цього сценарію, який я знайшов.
Context
наHttpContext
Якщо ви використовуєте .net core 2.0, це буде:
Context.Request.Query["id"]
Зразок використання:
<a href="@Url.Action("Query",new {parm1=Context.Request.Query["queryparm1"]})">GO</a>
Було запропоновано опублікувати це як відповідь, оскільки деякі інші відповіді дають помилки типу "Ім'я Контекст не існує в поточному контексті".
Просто використовуючи такі роботи:
Request.Query["queryparm1"]
Зразок використання:
<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>
Жодна з відповідей не працювала для мене, я отримував "" HttpRequestBase "не містить визначення" Запиту "", але це спрацювало:
HttpContext.Current.Request.QueryString["index"]
Я думаю, що більш елегантним рішенням є використання контролера та словника 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>
}
return View(new SomeViewModel{ IsIFrame = IFrame });
Для Asp.net Core 2
ViewContext.ModelState["id"].AttemptedValue
AttempValue
- якщо параметр не існує у рядку запиту, ви отримаєте виняток, тому спочатку слід перевірити:@if (ViewContext.ModelState["id"] != null)...