QueryString and RenderAction

本文关键字:RenderAction and QueryString | 更新日期: 2023-09-27 18:19:27

当发送特定的查询字符串参数时,我正在html标记上设置一个类,现在我这样做(Razor视图主页):

@if (HttpContext.Current.Request.QueryString.AllKeys.Contains("Foo") && HttpContext.Current.Request.QueryString["Foo"] == "Bar") {
  //Do something when Foo=Bar (like http://server/route?Foo==Bar)
  <html class="bar-class">
}
else {
  //Normal html tag
  <html>
}

适用于正常请求,但当我使用RenderAction(如)调用页面时就不行了

//Other view, the one requested by the user
@Html.RenderAction("Index", "Route", new {Foo="Bar"})

环顾四周后,我意识到只有一个实际的HttpContext,这意味着HttpContext.Current指向第一个请求。那么,如何获取子请求的查询字符串数据?

谢谢!/Victor

QueryString and RenderAction

您可以使用string作为Model,而不是针对查询字符串进行操作。

@model string
@if (!string.IsNullOrWhiteSpace(Model) && Model == "Bar") {
  //Do something when Foo=Bar (like http://server/route?Foo==Bar)
  <html class="bar-class">
}
else {
  //Normal html tag
  <html>
}
public ActionResult Route(string foo){
  return View(foo);
}

至少目前我通过使用TempData字典并在使用后删除值来解决问题,但我仍然对更好的解决方案感兴趣。似乎应该有办法让routedata通过。。。

/Victor