かみそりのページに以下のリンクがあります:
@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" })
以下に示すように、ビューページのソースに表示されます。
<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a>
リンクをクリックすると、URLは次のようになります。
http://localhost:54876/admin/profile/create?length=7
?length=7
。なぜこの自動生成されるのですか?
使用しているActionLink
オーバーライドは、 (string linkText、string actionName、Object routeValues、Object htmlAttributes) オーバーライドと一致します。したがって、「プロファイル」値はrouteValues
パラメーターに渡されます。このパラメーターに関するこの関数の動作は、すべてのパブリックプロパティを取得し、リンクの生成に使用されるルート値のリストに追加することです。 Stringにはパブリックプロパティ(長さ)が1つしかないため、「length = 7」になります。
使用する正しいオーバーロードは (string linkText、string actionName、string controllerName、Object routeValues、Object htmlAttributes) であり、次のように呼び出します:
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})
これの正確な原因はわかりませんが、次のように変更します。
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" })
最後のパラメーター(htmlattributes
が追加されたパラメーター)をオフにしたときにMVCがどのオーバーロードを選択しているかはわかりませんが、それで修正されます。これらの日のうちの1つを調査し、何が起こっているのかを正確に把握します。
注意すべきもう1つのことは、コントローラーを@ActionLink
で定義しているためです。たとえば、「新しいプロファイルの作成」@ActionLink
が表現されるビューは、 /admin/profile/index.cshtml」、既存のプロファイルをリストするビュー。この場合、@ActionLink
はProfileController
に既に関連しているため、@ActionLink
でコントローラーを定義する必要はありません。あなたの@ActionLink
は
@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" })
マークされた答えがするように、new{}
の代わりにnull
を使用しました。これは私自身がより適切だと思います。 ActionLinkのオーバーロードは、これまでで最も簡単なことではありません。