我目前有一些像
这样的路线 {控制器} / {行动} / {从} / {以} / {一些} / {其它} / {东西}
{控制器} / {行动} / {从} / {以} / {一些} / {其它}
{控制器} / {行动} / {从} / {以}
{控制器} / {行动}
和带有获取操作的表单的视图以检索结果。但是获取行动会转到
默认/最后一个路由,其中包含查询字符串中的参数。处理重定向到最特定路径的漂亮网址的最佳方法是什么?
即表格提交时
myurl.com/controller/action?from=20091021&to=20091131
它重定向到
myurl.com/controller/action/from-20091021/to-20091131
一般来说,我想知道我是否只是遗漏了一些关于合理路由设计的基本知识,因为我在使用Html.RouteLink映射到路由而不是查询字符串样式网址时遇到了一些麻烦。
提前感谢任何建议/指导/有用的链接。
答案 0 :(得分:3)
表单始终将参数编码为查询字符串。如果您希望客户端发出一个漂亮的URL GET
,那么您将需要使用提交处理程序,而不是在客户端构建URL。如果可以进行额外的往返,那么考虑使用POST
并执行一个采取POST
的操作并重新构建网址并对通过{{1接受值的操作执行RedirectToAction }}
客户端:
GET
服务器侧
$(function() {
$('form').submit( function() {
var params = [ $('from').val(), $('to').val(), ... ];
location.href = $(this).attr('action') + '/' + params.join('/');
return false;
});
$);
答案 1 :(得分:0)
啊哈!我想我发现我的问题与基于路由的东西没有返回我期望的路由 - 我已经指定了太多路由的默认值,这意味着默认(最后)路由始终匹配 - 并且每个参数都已结束在查询字符串中。