MVC Razorマークアップからクエリ文字列パラメーターを取得するにはどうすればよいですか?


81

RazorマークアップのURLパラメータを確認したい。たとえば、次のようなことを行うにはどうすればよいですか。

<div id="wrap" class="@{if (URL "IFRAME" PARAMETER EQUALS 1) iframe-page}">

回答:


124

同様のスレッド

<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")ため、ステートメントで使用していることに注意してください。それは私が見つけたこのシーンリオの道をきれいにします。QueryStringValuesstring


7
ヒントをありがとう。これは機能しました:<div id = "wrap" class = "@(Request.QueryString [" iframe "] ==" 1 "?" iframe ":string.Empty)">
TruMan1 2012年

1
@ TruMan1のコメントをあなたの答えに追加します。私の場合、値は(nop-commerceを使用して)ルートデータにはありませんでしたが、リクエストを介してアクセスできました。
イアン

明確にする-ビューがリダイレクトの結果として表示されている場合は、たとえば場合、Request.QueryString使用したい
クリスHalcrow

1
あなたは始まることを追加したい場合があります.NETのコア2.1あなたが変更する必要があるContextHttpContext
イワン・ガルシアTopete

36

.net core 2.0を使用している場合、これは次のようになります。

Context.Request.Query["id"]

使用例:

<a href="@Url.Action("Query",new {parm1=Context.Request.Query["queryparm1"]})">GO</a>

3
これにより、「コンテキストという名前は現在のコンテキストに存在しません」という名前が付けられます。ただし、Request.Query ["queryparm1"]を使用するだけで機能します。
x5657 2018年

1
@ x5657それが私にとって本当にうまくいった唯一の解決策だったので、あなたは答えとしてあなたのコメントを投稿するべきです!
jpsy 2018

11

他のいくつかの回答が「名前コンテキストが現在のコンテキストに存在しません」のようなエラーを出しているため、これを回答として投稿することが提案されました。

次の作品を使用するだけです。

Request.Query["queryparm1"]

使用例:

<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>

2
それは私のために仕事をしませんでしたが、これはやった:場合、Request.QueryString
TroySteven

8

答えはどれもうまくいきませんでした。「「HttpRequestBase」には「クエリ」の定義が含まれていません」というメッセージが表示されましたが、これは機能しました。

HttpContext.Current.Request.QueryString["index"]

5

より洗練された解決策は、コントローラーと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>
 }

3
このビューは、多くのコントローラー間で共有されます。ロジックをRazorマークアップに直接配置する代わりに、このようにすると面倒になると思います。また、部分的なビューでもこれを行う必要があるかもしれないと思います。
TruMan1 2012年

よりエレガントな解決策は、ViewModelの一部として返すことです return View(new SomeViewModel{ IsIFrame = IFrame });
Jose Capistrano 2018

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.