代码之家  ›  专栏  ›  技术社区  ›  Scott Baker

很难找出路线.地图路线对于此URL(C#)

  •  1
  • Scott Baker  · 技术社区  · 16 年前

    尽管有过多的网址路由帖子,我还没有达到启发的主题。

    我有一个MVC应用程序,工作很好,但我想得到幻想,并做一些网址重写,使我的用户更容易。

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

    routes.MapRoute(
          "Default",
          "{controller}/{action}/{query}",
          new{ controller = "SomeController", action="Index", query = "" });
    

    我想做的是重新路由URL http://mysite.com/12345

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

    但结果却让人看不清 http://mysite.com/ 它指向某个控制器/细节,而不是某个控制器/索引。

    编辑:

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

    <% using (Html.BeginForm(
                  "Details", 
                  "SomeController", 
                  FormMethod.Post, 
                  new { id = "SearchForm" })) { %>
        <% Html.RenderPartial("SearchForm", Model); %>
        <%= Html.ValidationMessageFor(model => model.Query) %>
    <% } %>
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Jon    16 年前

    移除 query = "" (很明显,这并不是可选的,因为您遇到了问题—如果没有合理的默认值,则不需要将它放在第三个参数中)并使用 MapRoute 采用第四个带有管线约束的参数:

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

    显然,如果正则表达式不是整数,则需要调整它。。。


    为了响应您的编辑…请确保您已经从“短”路由中删除了默认的for query-您已经在那里发布了默认的for query。同时建议您仔细检查表单并确保它为 query

    推荐文章