0

コントローラのアクションhttp://localhost:xyz/HelloWorldを指示するURLを取得しまし た。HelloWorldHome

URLでレンダリングされるページには、同じページを指すHtml.ActionLinkがあります(はい、現在表示しているページへのリンクです)。

http://localhost:xyz/HelloWorld/問題は、ページが(末尾にスラッシュを付けて)ロードされた場合にのみ、このリンクがページを指すことです。http://localhost:xyz/HelloWorldページが(スラッシュなしで)ロードされる場合、コントローラーのIndexアクションに指示されます。Home

いくつかのオーバーロードを試しましたが、これを引き起こしている原因や修正方法がわかりません。

Html.ActionLink("Hello World", "HelloWorld", "Home");
Html.ActionLink("Hello World", "HelloWorld", "Home", null, null);
Html.ActionLink("Hello World", "HelloWorld", "Home", new { arg = 0 }, null);

これらはすべてまったく同じ結果になります。末尾にスラッシュがある場合は正常に機能し、ない場合は直接動作しhttp://localhost:xyz/ます。

誰かがこの動作またはそれを修正する方法を説明できますか?

編集(おそらく関連性がありますか?):が存在し、0でない
場合arg、同じページがに表示されhttp://localhost:xyz/HelloWorld/arg、「Hello World」リンク(完全に正常に機能します)と、問題なく機能する同様のリンクがあります。

Html.ActionLink("Argument", "HelloWorld", "Home", new {arg = arg}, null);

これは、末尾のスラッシュが存在するかどうかに関係なく、それ自体を正しく指し示します。

ルート

routes.MapRoute(
  "HomeStart",
  "",
  new { controller = "Home", action = "Index" }
);

routes.MapRoute(
  "Hello World",
  "HelloWorld/{arg}",
  new {controller = "Home", action = "HelloWorld", arg = ""}
);
4

1 に答える 1

0

問題が解決しました。引数ありとなしのルートを分けました。

routes.MapRoute(
 "Hello World",
 "HelloWorld",
 new {controller = "Home", action = "HelloWorld"}
);

routes.MapRoute(
 "Hello World With Arg",
 "HelloWorld/{arg}",
 new {controller = "Home", action = "HelloWorld", arg = ""}
);
于 2012-03-09T20:25:33.303 に答える