55

私はかみそりのページに以下のリンクがあります:

@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。なぜこれが自動生成されるのですか?

4

3 に答える 3

88

使用ActionLinkしているオーバーライドは、(string linkText、string actionName、Object routeValues、Object htmlAttributes)オーバーライドと一致します。したがって、「プロファイル」値がパラメーターに渡されrouteValuesます。このパラメーターに関するこの関数の動作は、すべてのパブリックプロパティを取得し、リンクの生成に使用されるルート値のリストに追加することです。文字列にはパブリックプロパティ(長さ)が1つしかないため、「length=7」になります。

使用する正しいオーバーロードは(string linkText、string actionName、string controllerName、Object routeValues、Object htmlAttributes)であり、次のように呼び出します。

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})
于 2010-12-05T19:01:19.383 に答える
7

これの正確な原因はわかりませんが、次のように変更してください。

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" })

最後のパラメーター(追加されたパラメーター)を省略したときにMVCがどのオーバーロードを選択しているかはわかりませんがhtmlattributes、修正されます。最近のある日、私は何が起こっているのかを正確に調査して把握します。

于 2010-12-05T08:21:26.557 に答える
1

もう1つ注意すべき点は、でコントローラーを定義しているため@ActionLink、これを行う必要がない場合があります。たとえば、@ActionLink「CreateNewProfile」が表現されているビューは「/admin/profile/index.cshtml」である可能性があります。既存のプロファイルを一覧表示するビュー。この場合、はすでに相対的であるため、でコントローラーを定義する必要は@ActionLinkあり@ActionLinkませProfileController@ActionLink

@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" })

nullマークされた答えの代わりに使用new{}しましたが、私自身はこれがより適切だと思います。ActionLinkのオーバーロードは、これまでで最も簡単なことではありません。

于 2016-12-06T23:51:18.910 に答える