Ich möchte den URL-Parameter in meinem Razor-Markup überprüfen. Wie mache ich zum Beispiel so etwas:
<div id="wrap" class="@{if (URL "IFRAME" PARAMETER EQUALS 1) iframe-page}">
Antworten:
<div id="wrap" class=' @(ViewContext.RouteData.Values["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>
EDIT 01-10-2014:
Da diese Frage so beliebt ist, wurde diese Antwort verbessert.
Das obige Beispiel RouteData
bezieht nur die Werte von , also nur von den Abfrageringen, die von einer registrierten Route abgefangen werden. Um den Querystring-Wert zu erhalten, müssen Sie zum aktuellen Wert gelangen HttpRequest
. Der schnellste Weg besteht darin, "Request.Querystring" anzurufen (wie TruMan betonte). Die Antwort sollte also lauten:
<div id="wrap" class=' @(Request.QueryString["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>
Sie können auch RouteValues vs QueryString MVC überprüfen ?
EDIT 03-05-2019: Die obige
Lösung funktioniert für .NET Framework.
Wie andere wiesen darauf hin , wenn Sie möchten , Query - String - Wert bekommen .NET - Core Sie verwenden müssen Query
Objekt aus Context.Request
Pfad. So wäre es:
<div id="wrap" class=' @(Context.Request.Query["iframe"] == new StringValues("1") ? /*do sth*/ : /*do sth else*/')> </div>
Bitte beachten Sie Ich bin mit StringValues("1")
der Aussage , weil Query
kehrt StringValues
anstelle von reinem struct string
. Das ist ein sauberer Weg für dieses Szenario, das ich gefunden habe.
Context
umHttpContext
Wenn Sie .net Core 2.0 verwenden, ist dies:
Context.Request.Query["id"]
Beispielnutzung:
<a href="@Url.Action("Query",new {parm1=Context.Request.Query["queryparm1"]})">GO</a>
Es wurde vorgeschlagen, dies als Antwort zu veröffentlichen, da einige andere Antworten Fehler wie "Der Name Kontext existiert im aktuellen Kontext nicht" enthalten.
Verwenden Sie einfach die folgenden Werke:
Request.Query["queryparm1"]
Beispielnutzung:
<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>
Keine der Antworten funktionierte für mich, ich bekam "'HttpRequestBase' enthält keine Definition für 'Abfrage'", aber das hat funktioniert:
HttpContext.Current.Request.QueryString["index"]
Ich denke, eine elegantere Lösung ist die Verwendung des Controllers und des ViewData-Wörterbuchs:
//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 });
Für Asp.net Core 2
ViewContext.ModelState["id"].AttemptedValue
AttempValue
- wenn der Parameter nicht in der Abfragezeichenfolge vorhanden ist, erhalten Sie eine Ausnahme, so dass Sie zuerst überprüfen sollten:@if (ViewContext.ModelState["id"] != null)...