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

HTH

于 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 に答える