Html.BeginFormとASP.Net MVCのルーティングの問題
-
20-09-2019 - |
質問
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&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"});
所属していません StackOverflow