QueryString和RenderAction

时间:2012-01-05 12:37:37

标签: c# razor query-string renderaction asp.net-mvc

当我发送一个特定的查询字符串参数时,我在我的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指向第一个请求。那么 - 如何获取子请求的查询字符串数据?

谢谢! /维克多

2 个答案:

答案 0 :(得分:0)

您可以使用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);
}

答案 1 :(得分:0)

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

/维克多