C# mvc.net重定向表单到达';尼斯';url最佳方法
我目前有一系列路线,如 {controller}/{action}/{from}/{to}/{some}/{other}/{things}C# mvc.net重定向表单到达';尼斯';url最佳方法,c#,asp.net,asp.net-mvc,redirect,routes,C#,Asp.net,Asp.net Mvc,Redirect,Routes,我目前有一系列路线,如 {controller}/{action}/{from}/{to}/{some}/{other}/{things} {controller}/{action}/{from}/{to}/{some}/{other} {controller}/{action}/{from}/{to} {controller}/{action} 以及带有get操作的表单视图,以检索结果。但是get操作将转到 带有查询字符串中参数的默认/最后一个路由。处理重定向到最特定路由的漂亮url的最佳方法
{controller}/{action}/{from}/{to}/{some}/{other}
{controller}/{action}/{from}/{to}
{controller}/{action}
以及带有get操作的表单视图,以检索结果。但是get操作将转到 带有查询字符串中参数的默认/最后一个路由。处理重定向到最特定路由的漂亮url的最佳方法是什么? i、 e.当表格提交至
myurl.com/controller/action?from=20091021&to=20091131
它被重定向到
myurl.com/controller/action/from-20091021/to-20091131
一般来说,我想知道我是否只是缺少了一些关于合理路由设计的基本信息,因为我在Html.RouteLink映射到路由而不是查询字符串样式的URL时也遇到了一些问题
提前感谢您提供的任何建议/指导/有用的链接 表单总是将参数编码为查询字符串。如果您希望客户端发出一个漂亮的url
GET
,那么您需要使用提交处理程序,而不是在客户端构造url。如果可以有一个额外的往返行程,那么考虑使用<代码> POST <代码>,并采取一个动作,使用<代码> POST <代码>,并重构URL,并对通过代码接受值的操作进行重定向操作。
客户端:
$(function() {
$('form').submit( function() {
var params = [ $('from').val(), $('to').val(), ... ];
location.href = $(this).attr('action') + '/' + params.join('/');
return false;
});
$);
服务器端
[AcceptVerbs( HttpVerbs.Post )]
[ActionName( "MyAction" )]
public ActionResult MyPostAction( string from, string to, ... )
{
// you may be able to simply reuse the RouteValueDictionary, but may
// also need some transformations...
return RedirectToAction( "MyAction", new { from = from, to = to, ... } );
}
[AcceptVerbs( HttpVerbs.Get )]
public ActionResult MyAction( string from, string to, ... )
{
...
}
啊哈!我想我发现了基于路由的东西没有返回我期望的路由的问题-我为太多的路由指定了默认值,这意味着默认(最后一个)路由总是匹配的-并且每个参数都在查询字符串中结束