mvc.net重定向表单获取'nice'url最佳方法

时间:2009-12-21 14:08:08

标签: c# asp.net asp.net-mvc redirect routes

我目前有一些像

这样的路线

{控制器} / {行动} / {从} / {以} / {一些} / {其它} / {东西}
{控制器} / {行动} / {从} / {以} / {一些} / {其它}
{控制器} / {行动} / {从} / {以}
{控制器} / {行动}

和带有获取操作的表单的视图以检索结果。但是获取行动会转到 默认/最后一个路由,其中​​包含查询字符串中的参数。处理重定向到最特定路径的漂亮网址的最佳方法是什么? 即表格提交时 myurl.com/controller/action?from=20091021&to=20091131 它重定向到 myurl.com/controller/action/from-20091021/to-20091131

一般来说,我想知道我是否只是遗漏了一些关于合理路由设计的基本知识,因为我在使用Html.RouteLink映射到路由而不是查询字符串样式网址时遇到了一些麻烦。

提前感谢任何建议/指导/有用的链接。

2 个答案:

答案 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)

啊哈!我想我发现我的问题与基于路由的东西没有返回我期望的路由 - 我已经指定了太多路由的默认值,这意味着默认(最后)路由始终匹配 - 并且每个参数都已结束在查询字符串中。