如何从MVC Razor标记中获取查询字符串参数?

时间:2012-06-28 15:36:02

标签: c# asp.net asp.net-mvc razor asp.net-mvc-4

我想检查Razor标记中的URL参数。例如,我该怎么做:

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

7 个答案:

答案 0 :(得分:91)

Similar thread

<div id="wrap" class=' @(ViewContext.RouteData.Values["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>

编辑01-10-2014: 由于这个问题非常受欢迎,因此这个答案得到了改进。

上面的示例只会从RouteData获取值,因此只能从某些已注册路由捕获的查询字符串中获取。要获取查询字符串值,您必须转到当前HttpRequest。最快的方法是调用(如TruMan所指出的)`Request.Querystring',所以答案应该是:

<div id="wrap" class=' @(Request.QueryString["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>

您还可以查看RouteValues vs QueryString MVC?

编辑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结构而不是纯string。这是我发现的这个场景的清晰方式。

答案 1 :(得分:18)

如果你使用的是.net core 2.0,那就是:

Context.Request.Query["id"]

样本使用:

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

答案 2 :(得分: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 :(得分:5)

有人建议将此作为答案发布,因为其他一些答案会给出错误,例如&#39;当前上下文中不存在名称Context&#39;。

只需使用以下作品:

Request.Query["queryparm1"]

样本用法:

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

答案 4 :(得分:2)

用于 ASP.NET Core 5.0

您可以通过将 IHttpContextAccessor 注入 Razor 页面来获取查询参数。并使用 Request.Query 对象获取任何参数的值。

示例 URL => https://localhost:44326/?MyParam=MyValue

Index.cshtml:

@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor

<span>@HttpContextAccessor.HttpContext.Request.Query["MyParam"][0]</span>

请注意,可能存在多个具有相同名称的查询参数,因此这些值存储在一个集合中。

答案 5 :(得分:1)

没有一个答案对我有用,我得到了&#34;&#39; HttpRequestBase&#39;不包含&#39;查询&#39;&#34;的定义,但这确实有效:

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

答案 6 :(得分:1)

对于Asp.net Core 2

ViewContext.ModelState["id"].AttemptedValue