質問

私は呼ばれるエリアにコントローラーを持っています Admin

public class SiteVisitController : Controller
{
    public ViewResult ReadyForCompletion() { ... }

    public ViewResult CompleteAndExport() { ... }
}

そしてビュー(ReadyForCompletion.cshtml)同じクラスの別のコントローラーアクションに投稿しています

@using (Html.BeginForm( "CompleteAndExport", "SiteVisit" ))
{        
    <input type="submit" value="Complete &amp; Export" />
}

このフォームの生成されたHTMLには、空白のアクションがあります。

<form action="" method="post">  <input type="submit" value="Complete &amp; Export" />

</form>

私は知りたいです なぜこれに空白のアクションがあるのですか? 詳細については、aにも追加しました

@Url.RouteUrl(new { controller = "ReadyForCompletion", action = "SiteVisit", area = "Admin" })

空の文字列も印刷しました。また、空の使用を使用する場合 Html.BeginForm() 正しいアクションを生成します。

登録ルートはです

        context.MapRoute(
            "Admin_manyParams",
            "Admin/{controller}/{action}/{id}/{actionId}",
            new { action = "Index", id = UrlParameter.Optional, actionId = UrlParameter.Optional }
        );
役に立ちましたか?

解決

あなたの問題は、連続したオプションのパラメーターがあることによって引き起こされると思います。ルートを変更して2つのオプションのパラメーターを含めるまで、問題を再現することができませんでした。

見る: 問題を説明するこの記事

他のヒント

ASP.NETコアを使用してこの問題に遭遇した人にとっては、根本原因は同じですが、解決策はわずかに異なります。呼び出すときに複数のデフォルト値を使用して、これを最初にCOREで見ました .MapRoutes(). 。例えば

routes.MapRoute(
    name: "default",
    template: "{controller}/{action}/{id?}",
    defaults: new { controller = "Foo", action = "Bar" }
);

回避策は、デフォルト値を文字列テンプレートに配置することです。

routes.MapRoute(
    name: "default",
    template: "{controller=Foo}/{action=Bar}/{id?}"
);

ymmv。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top