RazorマークアップのURLパラメータを確認したい。たとえば、次のようなことを行うにはどうすればよいですか。
<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>
2014
年1月10日編集:この質問は非常に人気があるため、この回答は改善されました。
上記の例ではRouteData
、からのみ値を取得するため、登録済みのルートによってキャッチされたクエリ文字列からのみ取得します。クエリ文字列値を取得するには、現在のに取得する必要がありますHttpRequest
。最も速い方法は、(TruManが指摘したように) `Request.Querystring 'を呼び出すことであるため、答えは次のようになります。
<div id="wrap" class=' @(Request.QueryString["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>
RouteValuesとQueryStringMVCを確認することもできますか?
編集03-05-2019:
上記のソリューションは.NETFrameworkで機能しています。
他の人が指摘したように、.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>
他のいくつかの回答が「名前コンテキストが現在のコンテキストに存在しません」のようなエラーを出しているため、これを回答として投稿することが提案されました。
次の作品を使用するだけです。
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 Core2の場合
ViewContext.ModelState["id"].AttemptedValue
AttempValue
ますが、クエリ文字列に@if (ViewContext.ModelState["id"] != null)...