使用Html.BeginForm的ASP.Net MVC路由问题

时间:2009-11-18 09:36:06

标签: asp.net-mvc routing html.beginform

使用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 个答案:

答案 0 :(得分:9)

我遇到了这个确切的问题。我不确定为什么System.Web.Mvc.HtmlHelper似乎只是使用路由表中的第一个非忽略路由来生成链接等,但我找到了“BeginForm”问题的解决方法。

如果您在Global.asax.cs中命名了“默认”路线,例如:

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

然后你可以使用Html.BeginFormRoute方法并调用“默认”MVC路由的名称,然后专门命名控制器和动作,从而得到正确的url:

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

HTH

答案 1 :(得分:1)

试试这个

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"});
}

我认为它可以解决你的问题。

答案 2 :(得分:-1)

在默认路线

之前添加此项
      routes.MapRoute("", "ControllerOne/ActionOne", new { controller = "ControllerOne", action = "ActionOneOne"});