3

使用 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"

这是设计使然还是我错过了一些基本的东西?

干杯!

4

3 回答 3

10

我经历过这个确切的问题。我不确定为什么 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" })) { }

高温高压

于 2009-11-18T09:58:01.503 回答
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"});
}

我认为它应该可以解决您的问题。

于 2009-11-18T09:41:04.323 回答
-1

在默认路由之前添加这个

      routes.MapRoute("", "ControllerOne/ActionOne", new { controller = "ControllerOne", action = "ActionOneOne"});
于 2009-11-18T09:47:15.280 回答