ASP.Net MVC Маршрутизация проблема с Html.BeginForm - PullRequest
3 голосов
/ 18 ноября 2009

Используя MVC, у меня есть помощник HTML-формы в моем представлении:

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

При использовании маршрута по умолчанию выходные данные для атрибута действия соответствуют ожидаемым:

<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 ]

9 голосов
/ 18 ноября 2009

У меня возникла именно эта проблема. Я не совсем уверен, почему 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" })) { }

НТН

1 голос
/ 18 ноября 2009

Попробуйте это

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

Я думаю, это должно решить твою проблему.

0 голосов
/ 18 ноября 2009

Добавить до маршрута по умолчанию

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