web-dev-qa-db-ja.com

HTML IDが指定されたHtml.ActionLink?

Html.ActionLinkで生成されたものにHTML IDを与えて、現在の場所に応じてCSSを変更できるようにします。リンクのセットを持つMasterPageがあり、そのアクティブな#idのcssを変更するJqueryでアクティブな「タブ」を区別したい

今私は使用しています:

<%: Html.ActionLink("Some View", "Index", "controller")%>

以下を生成します。

<a href="/controller">Some View</a>

生成したい:

<a id="something" href="/controller">Some View</a>

それは可能ですか?私はもう試した:

<%: Html.ActionLink("Some View", "Index", "controller", new {id="blahbla")%>

しかし、それは以下を生成します:

<a href="/controller/Length?5">Some View</a>
37
Peter

あなたは正しい軌道に乗っていました。コードに} expectedエラーが発生する可能性のあるタイプミスがあるため、なぜ機能しなかったのかわかりません。以下はあなたが探しているものです:

 <%= Html.ActionLink("Test Link", "SomeAction", "SomeController",
         null, new {id = "someID" }) %> 

次のHTMLを生成します:

<a href="/SomeController/SomeAction" id="someID">Test Link</a>

編集:あなたが試したものを読み間違えていたため、問題が何であるかがわかりました。 id html要素を渡すために間違ったオーバーロードを使用しています。おそらくnew { id="blah" } paramをrouteValuesパラメーターに渡すことで、必要なhtmlAttributesパラメーターではなく、ルートリンクの構築時に使用されます。

私はあなたが使用していると思う:

ActionLink(string linkText, string actionName, Object routeValues,
    Object htmlAttributes)

あなたが使用する必要があるのは、私の答えで上でやったような次のオーバーロードです:

ActionLink(string linkText, string actionName, string controllerName,
    Object routeValues, Object htmlAttributes)

これにより、new { id="blah" }htmlAttributesパラメーターに確実に渡されます。

52
Kelsey

これを試して:

<%: Html.ActionLink("Some View", "Index", "controller", null, new {id="something}")%>
6
Peter

基本的に、必要な署名を持つメソッドのオーバーロードがないため、エラーが発生します。

必要なものに最も近い署名は

public static string ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName,
Object routeValues,
Object htmlAttributes

Id属性をroutevalueに渡しているため、面白いhrefが提供されています。 routevalueにnullを渡し、html属性を追加します

2
MrBliz

これを試して

@Html.ActionLink("Forgot your access?", "RecoverPassword", 
"Account", new { area = "registration-full.html" }, 
new { @class = "col-xs-6", id = "login-forget-link" })
1
Benja