Asp.net mvc 2 查找路由时遇到问题。此URL的Maproute(C)

Asp.net mvc 2 查找路由时遇到问题。此URL的Maproute(C),asp.net-mvc-2,url-rewriting,url-routing,Asp.net Mvc 2,Url Rewriting,Url Routing,尽管有过多的URL路由帖子,我还没有在这个问题上获得启发 我有一个运行良好的MVC应用程序,但我想做一些花式的URL重写,让我的用户更容易使用 默认路线与通常路线略有不同: routes.MapRoute( "Default", "{controller}/{action}/{query}", new{ controller = "SomeController", action="Index", query = "" }); 我要做的是使用12345查询将U

尽管有过多的URL路由帖子,我还没有在这个问题上获得启发

我有一个运行良好的MVC应用程序,但我想做一些花式的URL重写,让我的用户更容易使用

默认路线与通常路线略有不同:

routes.MapRoute(
      "Default",
      "{controller}/{action}/{query}",
      new{ controller = "SomeController", action="Index", query = "" });
我要做的是使用12345查询将URL重新路由到SomeController的Details操作。我试过这个:

routes.MapRoute(
      "DirectToDetails",
      "{query}",
      new{ controller = "SomeController", action="Details" query="" });

routes.MapRoute(
      "Default",
      "{controller}/{action}/{query}",
      new{ controller = "SomeController", action="Index", query = "" });
但这最终会变得模糊,它会转到SomeController/Details,而不是SomeController/Index

编辑:

根据@Jon的建议,我删除了匿名对象中的query=:

routes.MapRoute(
      "DirectToDetails",
      "{query}",
      new{ controller = "SomeController", action="Details" });
。。。解决了这个问题;现在,当我在Views/SomeView/Index处提交表单并提交到前面提到的SomeController/Details时,我得到一个资源找不到错误

以下是申报表:

<% using (Html.BeginForm(
              "Details", 
              "SomeController", 
              FormMethod.Post, 
              new { id = "SearchForm" })) { %>
    <% Html.RenderPartial("SearchForm", Model); %>
    <%= Html.ValidationMessageFor(model => model.Query) %>
<% } %>
Remove the query=显然,这不是可选的,因为正是您遇到的问题-如果没有合理的默认值,则无需将其放在第三个参数中,并使用MapRoute重载,该重载使用带有路由约束的第四个参数:

routes.MapRoute(
  "DirectToDetails",
  "{query}",
  new { controller = "SomeController", action="Details" },
  new { query = @"\d+" });
显然,如果正则表达式不是整数,则需要调整它


为了响应您的编辑…请确保您已从短路线中删除默认的查询-您已将默认的一个张贴在那里。还建议您仔细检查表单,确保它为查询发布了一个值,或者在post操作方法上设置一个断点,并确保查询参数被正确绑定?

这符合我的要求-谢谢。然而,现在当我提交表单时,我很难找到一个资源错误。我将编辑问题以反映这一点。我在代码中更正了正确的方法,但在这里剪切粘贴了错误的方法。