在我的asp.net-mvc ontroller中,我接受了一堆表单字段值,并从那些创建一个Lucene库理解的字符串。 然后我想重定向到一个get方法,它将根据这个lucene字符串显示结果。
lucene字符串的格式为{fieldName1:value1 fieldName2:value2 ...}
我的Global.asax对重定向目标有以下条目:
routes.MapRoute(
"AdvancedSearch",
"AdvancedSearch.mvc/{displayType}/luceneString",
new { controller = "Search", action = "AdvancedSearch",
displayType = "chip", luceneString = "" }
);
所以我的控制器捕获帖子,创建luceneString并执行以下操作:
return RedirectToRoute("AdvancedSearch", new
{
Controller = "Search",
action = "AdvancedSearch",
displayType = "chip",
queryString = Url.Encode("company:test name:testname")
});
这给了我一个500:糟糕的请求。 即使有一个参数,它也不起作用。即使使用“:”也不起作用 我试过了:
仅当我更改此URL以采用
格式的queryString时,它才有效AdvancedSearch.mvc/chip?q=company%3Atest+name%3AtestName
如果不采用“?q =”的话,我该如何才能正确编码 如果我必须使用查询字符串,我如何在路由表中定义这样的东西?我该如何调用重定向到它?
答案 0 :(得分:3)
首先,您的MapRoute不应包含有关查询字符串的任何内容。路由仅包含URI的资源部分;它们不包含查询。
其次,您不需要对查询字符串进行编码; ActionLink的/ RouteLink /等。会为你做那件事。在构建HREF时,路径中未包含的任何令牌都将自动成为编码查询字符串参数。
卸下:
/luceneString
...从你的路线。
将您的代码更改为:
return RedirectToRoute("AdvancedSearch", new
{
Controller = "Search",
action = "AdvancedSearch",
displayType = "chip",
q = "company:test name:testname"
});