在ASP.NET MVC下,您应该像在ASP.NET WebForms中一样使用QueryString参数吗?还是[AcceptVerbs(HttpVerbs.Get)]
声明以某种方式被使用?
Answers:
只需在操作上使用一个参数即可接受查询字符串参数-即
public ActionResult Foo(string someValue, int someOtherValue) {...}
它将接受类似的查询 .../someroute?someValue=abc&someOtherValue=123
除此之外,您可以直接查看请求以进行更多控制。
我想你要找的是
Request.QueryString["QueryStringName"]
您可以通过添加以下内容在视图上访问它 @
现在来看我的示例,我用QueryString生成了一个网址
var listURL = '@Url.RouteUrl(new { controller = "Sector", action = "List" , name = Request.QueryString["name"]})';
listURL的值为 /Sector/List?name=value'
什么时候queryString
是空的
listURL的值为 /Sector/List
实际上,您可以通过两种方式捕获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的所有字符串/已编码文件对象的捕获动态列表,则它们会更有意义,因此您可以在一个调用中轻松访问它们。也许有人可以证明这一点吗?
对我而言,Controller如何捕获查询字符串毫无意义,但这确实意味着您比捕获查询字符串更灵活地捕获查询字符串。所以选择你的毒药。。。