为什么这条路线不正确

时间:2014-03-11 15:07:48

标签: asp.net-mvc routes

我的MVC4网站显示数据库中的项目用户可以在网络表单中“优化”他们的搜索。在此之后,他们单击搜索按钮并显示其结果。

在这个阶段,我只有1条路线

 routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/",
          defaults: new { controller = "Home", action = "Index" }
 );

当我第一次加载页面时,地址为www.mydomain.com/products/connectors/,在我进行搜索后,它会附加我的查询字符串

www.mydomain.com/products/connectors/?Gender=1

现在,我正在添加分页,并希望用户能够选择下一页。我使用了来自How do I do pagination in ASP.NET MVC?的Marc答案来做到这一点。分页效果很好。

这是routeconfig.cs

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "AllRefineSearch",
            url: "{controller}/{action}/{startIndex}/",
            defaults: new { controller = "Products", action = "Connectors", startIndex = 0, pageSize = 10 }
        );

        routes.MapRoute(
           name: "Default",
           url: "{controller}/{action}/",
           defaults: new { controller = "Home", action = "Index" }
       );
    }
}

现在问题是,当我点击搜索按钮时,我的控制器和动作将从地址中删除。换句话说,地址是www.mydomain.com/?Gender=1

我不知道如何将控制器和操作保留在URL中,因为我认为路由指定了这个!

我的表单是

    @using (Html.BeginForm("Connectors", "Products", FormMethod.Get))
    {

      @Html.DropDownListFor(a => a.Gender, Model.ConnectorRefineSearch.Gender, "---Select---")  
      <input type="submit" value="Search" class="searchButton" />
    }

我的控制器

    [HttpGet]
    public ActionResult Connectors(ConnectorVm connector, int startIndex, int pageSize)
    {
        connector.UpdateSearch();
        return View(connector);
    }

1 个答案:

答案 0 :(得分:0)

问题在于 AllRefineSearch 路由及其默认值:“产品”控制器,“连接器”操作和“0”startIndex。

在路线中提供默认值也意味着这些段是可选的。在您的情况下,网址“/”将匹配该路线,并且每个细分都将采用其默认值。

在为链接,表单等生成URL时,会遵循类似的过程。您将“产品”作为控制器,“连接器”作为操作,因此将使用AllRefineSearch。因为它们是默认值,所以它会将表单标记的url简化为“/”。最后在提交时,将在查询字符串中添加输入值。

尝试不在控制器和操作段的搜索路径中提供默认值:

routes.MapRoute(
    name: "AllRefineSearch",
    url: "{controller}/{action}/{startIndex}/",
    defaults: new { startIndex = 0, pageSize = 10 }
);