なぜHTML.BEGINFORMが空のアクションを生成するのですか?
-
28-10-2019 - |
質問
私は呼ばれるエリアにコントローラーを持っています Admin
public class SiteVisitController : Controller
{
public ViewResult ReadyForCompletion() { ... }
public ViewResult CompleteAndExport() { ... }
}
そしてビュー(ReadyForCompletion.cshtml
)同じクラスの別のコントローラーアクションに投稿しています
@using (Html.BeginForm( "CompleteAndExport", "SiteVisit" ))
{
<input type="submit" value="Complete & Export" />
}
このフォームの生成されたHTMLには、空白のアクションがあります。
<form action="" method="post"> <input type="submit" value="Complete & 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。
所属していません StackOverflow