Razor ActionLink Autoenerating?length = 7 in url?
-
08-10-2019 - |
質問
かみそりページに以下にリンクがあります:
@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
パラメーター。このパラメーターに関するこの関数の動作は、その上のすべてのパブリックプロパティを取得し、リンクを生成するために使用されるルート値のリストに追加することです。文字列には1つの公共財産(長さ)しかないので、「長さ= 7」になります。
使用したい正しい過負荷はです (文字列linktext、string actionname、string controllname、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" })
最後のパラメーターを除外したときに、MVCがどの過負荷を選択しているのかわかりません(htmlattributes
追加されたものですが、それはそれを修正します。これらの日のうちの1つは、何が起こっているのかを調査し、正確に把握します。
あなたがでコントローラーを定義しているので、別のことに注意すべきこと @ActionLink
, 、たとえば、「新しいプロファイルを作成する」という見解など、必要ではないかもしれません。 @ActionLink
表現されているのは「/admin/profile/index.cshtml」です。これは、既存のプロファイルをリストするビューです。この場合、コントローラーを定義する必要はありません。 @ActionLink
として @ActionLink
既にに関連しています ProfileController
, 、だからあなた @ActionLink
になり得る
@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" })
使った null
それ以外の new{}
顕著な答えがそうであるように、これは私自身がより適切だと思います。 ActionLinkのオーバーロードは、これまでで最も簡単なものではありません。