[英]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.