1. ホーム
  2. asp.net-mvc

[解決済み】Html.ActionLinkが"?Length=4 "とレンダリングされるのはなぜか?

2022-03-27 22:31:38

質問

なぜこのコードが必要なのか、非常に困っています。

Html.ActionLink("About", "About", "Home", new { hidefocus = "hidefocus" })

の結果は、このリンクになります。

<a hidefocus="hidefocus" href="/Home/About?Length=4">About</a>

hidefocus の部分は、私が目指していたものなのですが、どこをどうすれば ?Length=4 はどこから来るのでしょうか?

解決方法は?

Length=4 は、文字列オブジェクトをシリアライズしようとしたときに発生するものです。あなたのコードは次のように実行されています。 ActionLink メソッドを使用します。

public static string ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, object htmlAttributes)

これは string このオブジェクトは、MVCプラムがパブリックプロパティを検索し、それらをルート値に変換します。の場合 string オブジェクトの場合、唯一のパブリックプロパティは Length そして、Lengthパラメータで定義されたルートは存在しないので、プロパティ名と値をクエリ文字列パラメータとして付加します。を使用しないページからこの処理を実行すると、おそらく HomeController が見つからないというエラーを投げるでしょう。 About アクションメソッドを使用します。以下のように使ってみてください。

Html.ActionLink("About", "About", new { controller = "Home" }, new { hidefocus = "hidefocus" })