繁体   English   中英

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

[英]How to get query string parameter from MVC Razor markup?

我想检查我的 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 与 QueryString MVC?

编辑 03-05-2019:以上解决方案适用于.NET Framework。
正如其他人指出的那样,如果您想在.NET Core中获取查询字符串值,则必须使用Context.Request路径中的Query对象。 所以它会是:

<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"]

适用于 ASP.NET Core 5.0

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

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

索引.cshtml:

@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor

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

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

我认为更优雅的解决方案是使用控制器和 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>
 }

对于 Asp.net Core 2

ViewContext.ModelState["id"].AttemptedValue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM