Chcę sprawdzić parametr adresu URL w moim znaczniku Razor. Na przykład, jak zrobić coś takiego:
<div id="wrap" class="@{if (URL "IFRAME" PARAMETER EQUALS 1) iframe-page}">
Odpowiedzi:
<div id="wrap" class=' @(ViewContext.RouteData.Values["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>
EDYCJA 01-10-2014:
Ponieważ to pytanie jest tak popularne, ta odpowiedź została ulepszona.
Powyższy przykład pobierze wartości tylko z RouteData
, a więc tylko z kwerend, które są przechwytywane przez jakąś zarejestrowaną trasę. Aby uzyskać wartość querystring, musisz dostać się do prądu HttpRequest
. Najszybszym sposobem jest wywołanie (jak wskazał TruMan) `Request.Querystring ', więc odpowiedź powinna brzmieć:
<div id="wrap" class=' @(Request.QueryString["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>
Możesz również sprawdzić RouteValues vs QueryString MVC?
EDYCJA 03-05-2019:
Powyższe rozwiązanie działa dla .NET Framework.
Jak wskazywali inni, jeśli chcesz uzyskać wartość ciągu zapytania w .NET Core , musisz użyć Query
obiektu ze Context.Request
ścieżki. Tak więc byłoby:
<div id="wrap" class=' @(Context.Request.Query["iframe"] == new StringValues("1") ? /*do sth*/ : /*do sth else*/')> </div>
Zwróć uwagę, że używam StringValues("1")
w oświadczeniu, ponieważ Query
zwraca StringValues
struct zamiast pure string
. To oczyszcza sposób na ten scenariusz, który znalazłem.
Jeśli używasz .net core 2.0, będzie to:
Context.Request.Query["id"]
Przykładowe użycie:
<a href="@Url.Action("Query",new {parm1=Context.Request.Query["queryparm1"]})">GO</a>
Zaproponowano opublikowanie tego jako odpowiedzi, ponieważ niektóre inne odpowiedzi zawierają błędy, takie jak „Nazwa Kontekst nie istnieje w obecnym kontekście”.
Używając tylko następujących prac:
Request.Query["queryparm1"]
Przykładowe użycie:
<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>
Żadna z odpowiedzi nie zadziałała dla mnie, otrzymywałem „HttpRequestBase” nie zawiera definicji zapytania „Query” ”, ale to zadziałało:
HttpContext.Current.Request.QueryString["index"]
Myślę, że bardziej eleganckim rozwiązaniem jest użycie kontrolera i słownika 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 });
W przypadku Asp.net Core 2
ViewContext.ModelState["id"].AttemptedValue
AttempValue
- jeśli parametr nie istnieje w ciągu zapytania, otrzymasz wyjątek, więc powinieneś najpierw sprawdzić:@if (ViewContext.ModelState["id"] != null)...