我想检查我的Razor标记中的URL参数。例如,如何执行以下操作:
<div id="wrap" class="@{if (URL "IFRAME" PARAMETER EQUALS 1) iframe-page}">
Answers:
<div id="wrap" class=' @(ViewContext.RouteData.Values["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>
编辑2014年1月10日:
由于此问题如此受欢迎,因此此答案已得到改善。
上面的示例仅从中获取值RouteData
,因此仅从某些已注册路由捕获的查询字符串中获取值。要获取querystring值,您必须获取current 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中获取查询字符串值,则必须使用路径Query
对象Context.Request
。因此它将是:
<div id="wrap" class=' @(Context.Request.Query["iframe"] == new StringValues("1") ? /*do sth*/ : /*do sth else*/')> </div>
请注意,我StringValues("1")
在声明中使用的是因为Query
返回StringValues
struct而不是pure string
。这是我发现的这个场景的清洁方法。
建议将其发布为答案,因为其他一些答案会产生错误,例如“名称Context在当前上下文中不存在”。
只需使用以下作品:
Request.Query["queryparm1"]
用法示例:
<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>
没有一个答案对我有用,我得到的是“'HttpRequestBase'不包含'查询'的定义”,但这确实可行:
HttpContext.Current.Request.QueryString["index"]
我认为一个更优雅的解决方案是使用控制器和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>
}
return View(new SomeViewModel{ IsIFrame = IFrame });
对于Asp.net Core 2
ViewContext.ModelState["id"].AttemptedValue
AttempValue
-如果查询字符串中不存在该参数,您将得到一个异常,因此您应该首先检查:@if (ViewContext.ModelState["id"] != null)...