我想在我的Razor标记中检查URL参数。例如,我如何像这样做:
<div id="wrap" class="@{if (URL "IFRAME" PARAMETER EQUALS 1) iframe-page}">
我想在我的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 vs QueryString MVC?。
编辑 2019年03月05日:
上述解决方案适用于 .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>
有人建议将此作为答案发布,因为其他一些答案出现了诸如“当前上下文中不存在Context名称”的错误。
只需使用以下内容即可:
Request.Query["queryparm1"]
使用示例:
<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>
适用于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>
对我来说,这些答案都没有起作用,我一直看到 "'HttpRequestBase' does not contain a definition for 'Query'",但是这个方法可行:
HttpContext.Current.Request.QueryString["index"]
//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 });
- Jose CapistranoViewContext.ModelState["id"].AttemptedValue
Context
更改为HttpContext
。 - Ivan García Topete