質問

MVCを使用して、私は私の見解では、HTMLフォームヘルパーを持っています:

using (Html.BeginForm("ActionOne", "ControllerOne")) ...
予想通り

デフォルトルートを使用して、action属性のために出力されます:

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

しかし、一見無マッチした新しいルートをregistreringすると、出力に影響します。

ルーティングコード:

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"

これは仕様によるものか、私は基本的に何かをmisingのでしょうか?

乾杯!

役に立ちましたか?

解決

私はこの正確な問題を経験しています。私は正確な理由System.Web.Mvc.HtmlHelperがちょうどからなどのリンクを生成するためのRouteTableに最初の非無視するルートを使用しているようだかわからないが、私は「BeginForm」問題の回避策を発見した。

あなたがGlobal.asax.csであなたの「デフォルト」ルート命名した場合は、例えばます:

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

次に、あなたは正しいURLで、その結果、特にコントローラとアクションに名前を付け、その後、Html.BeginFormRouteメソッドを使用し、「デフォルト」MVCルートの名前を呼び出すことができます

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

HTH

他のヒント

これを試してみてください。

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

私はそれはあなたの問題を解決するべきだと思います。

デフォルトルートの前にこれを追加

      routes.MapRoute("", "ControllerOne/ActionOne", new { controller = "ControllerOne", action = "ActionOneOne"});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top