代码之家  ›  专栏  ›  技术社区  ›  theGecko

带有html.begininform的ASP.NET MVC路由问题

  •  3
  • theGecko  · 技术社区  · 16 年前

    使用MVC,我的视图中有一个HTML表单帮助程序:

    using (Html.BeginForm("ActionOne", "ControllerOne")) ...
    

    使用默认路由,action属性的输出如预期的那样:

    <form action="/ControllerOne/ActionOne" ...
    

    但是注册一个看起来没有匹配的新路由会影响输出。

    路由代码:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.Add("testRoute", new Route("MyUrl", new MvcRouteHandler()));
    
        routes.MapRoute("Default", "{controller}/{action}", new { controller = "Home", action = "Index"});
    }
    

    输出:

    <form action="/MyUrl?action=ActionOne&amp;controller=ControllerOne"
    

    这是设计出来的还是我误解了一些基本的东西?

    干杯!

    3 回复  |  直到 16 年前
        1
  •  9
  •   Stelloy    16 年前

    我经历过这个确切的问题。我不清楚为什么system.web.mvc.htmlhelper似乎只是使用RouteTable中的第一个非忽略路由来生成链接等,但我找到了解决“begininform”问题的方法。

    如果您已在global.asax.cs中命名了“默认”路由,例如:

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

    然后,您可以使用html.beginomroute方法并调用“默认”MVC路由的名称,然后具体命名控制器和操作,从而得到正确的URL:

    using (Html.BeginRouteForm("Default", new { controller="YourController", action = "YourFormAction" })) { }
    

    高温高压

        2
  •  1
  •   Wei Ma    16 年前

    试试这个

    public static void RegisterRoutes(RouteCollection routes)
    {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.Add("testRoute", new Route("MyUrl/***{action}/{controller}***", new MvcRouteHandler()));
    
            routes.MapRoute("Default", "{controller}/{action}", new { controller = "Home", action = "Index"});
    }
    

    我认为它应该能解决你的问题。

        3
  •  -1
  •   Tinku    16 年前

    将此添加到默认路由之前

          routes.MapRoute("", "ControllerOne/ActionOne", new { controller = "ControllerOne", action = "ActionOneOne"});
    
    推荐文章