ASP.NET MVC - 获取QueryString值

时间:2009-03-09 20:13:59

标签: .net asp.net asp.net-mvc

在ASP.NET MVC下你应该像在ASP.NET WebForms中那样获取QueryString参数吗?或以某种方式使用[AcceptVerbs(HttpVerbs.Get)]声明?

6 个答案:

答案 0 :(得分:101)

只需使用动作上的参数即可接受查询字符串参数 - 即

public ActionResult Foo(string someValue, int someOtherValue) {...}

将接受.../someroute?someValue=abc&someOtherValue=123

之类的查询

除此之外,您可以直接查看请求以获得更多控制权。

答案 1 :(得分:24)

您可以随时使用Request.QueryString集合,例如Web表单,但您也可以让MVC处理它们并将它们作为参数传递。这是建议的方式,因为它更容易,它将自动验证输入数据类型。

答案 2 :(得分:23)

我认为你在寻找的是

Request.QueryString["QueryStringName"]

您可以通过添加@

在视图中访问它

现在看看我的例子,我用QueryString生成了一个Url

 var listURL = '@Url.RouteUrl(new { controller = "Sector", action = "List" , name = Request.QueryString["name"]})';

listURL值为/Sector/List?name=value'

queryString为空时

listURL值为/Sector/List

答案 3 :(得分:7)

我建议使用控制器的ValueProvider属性,就像UpdateModel / TryUpdateModel提取所需的路由,查询和表单参数一样。这将使您的方法签名不会变得非常大并且经常变化。它还使测试更容易,因为您可以在单元测试期间向控制器提供ValueProvider。

答案 4 :(得分:1)

实际上你可以用两种方式在MVC中捕获查询字符串.....

public ActionResult CrazyMVC(string knownQuerystring)
{

  // This is the known query string captured by the Controller Action Method parameter above
  string myKnownQuerystring = knownQuerystring;

  // This is what I call the mysterious "unknown" query string
  // It is not known because the Controller isn't capturing it
  string myUnknownQuerystring = Request.QueryString["unknownQuerystring"];

  return Content(myKnownQuerystring + " - " + myUnknownQuerystring);

}

这将捕获两个查询字符串...例如:

/CrazyMVC?knownQuerystring=123&unknownQuerystring=456

Output: 123 - 456

不要问我为什么他们这样设计。如果他们为单个查询字符串抛出整个Controller动作系统并且只是通过url-form-encoding为URL返回所有字符串/编码文件对象的捕获动态列表,那么更有意义,这样您就可以在一次调用中轻松访问它们。也许这里有人可以证明它是否可能?

对我来说没有任何意义,控制器如何捕获查询字符串,但它确实意味着您可以更灵活地捕获查询字符串,而不是教你开箱即用。所以选择你的毒药....两者都可以正常工作。

答案 5 :(得分:-1)

@Context.Request.Query["yourId"]