0

ルーティングが次のように設定されている MVC 6 プロジェクトがあります。

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}/{closeOnSubmit?}");
            });

次のようなタグヘルパーを使用してハイパーリンクを作成しようとしています:

<a asp-controller="MyController" asp-action="Create" asp-route-closeOnSubmit="true" class="fa fa-plus indent-15">+</a>

ページが作成され、リンクの上にマウスをhttp://localhost/MyController/Create置くと、closeOnSubmit パラメーターがないと報告されます。Chrome の開発者ツールで HTML を調べると、次のようになります。

<a href class="fa fa-plus indent-15">+</a>

closeOnSubmit パラメータをルートに適切に追加するにはどうすればよいですか?

編集:
MVC ルーティングを完全には理解していないため、残念ながら誤った情報を提供してしまいました。最初にアプリを作成したとき、次のデフォルト ルートがありました。

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

これを機能させようとしたとき、ルートに closeOnSubmit が追加されていなかったため、正しくルーティングされていないのではないかと考えました。ダリンの答えを読んだ後、私はそれを理解し、ルートに追加した後に間違いなく間違っていました. ただし、この特定のルートでは、id を渡す必要はありません。id ではなく closeOnSubmit を使用するようにデフォルト ルートを変更しようとしましたが、リンクが正しく作成されないという問題は解決しませんでした。

トラブルシューティング中に、ルートが思ったよりもさらに間違っていることもわかりました。私が取り組んでいるページは、に行くことによって生成されhttp://localhost/ControllerOne/Createます。ハイパーリンクが指すページはhttp://localhost/ControllerTwo/Create'. Even though my asp-controller tag is set to ControllerTwo, all of my hyperlinks are showing ashttp://ControllerOne/Create ` です。href 属性が空のためだと思いますが、href 属性が空になる原因を知りたいです。

4

2 に答える 2

0

オプションにできるのは、ルートの最後のパラメーターのみです。そうしないと、ルーティング エンジンは単にルートを明確にすることができません。

ルーティング エンジンが次の URL に遭遇したときのことを考えてみてください。

http://localhost/MyController/Create/true

trueトークンをidパラメーターまたはパラメーターにバインドする必要がありcloseOnSubmitますか?

したがって、idパラメーターが必須であることを確認してください。

template: "{controller=Home}/{action=Index}/{id}/{closeOnSubmit?}"

また、URL を作成するときにその値を指定したこと:

<a asp-controller="MyController" asp-action="Create" asp-route-id="1234" asp-route-closeOnSubmit="true" class="fa fa-plus indent-15">+</a>
于 2015-12-29T15:56:38.430 に答える