ti-enxame.com

Html.ActionLink com um ID HTML especificado?

Eu gostaria de dar o like gerado com um Html.ActionLink um ID HTML para que eu possa alterar o CSS dependendo de onde estou. Eu tenho um MasterPage com um conjunto de links e gostaria de distinguir o "Tab" ativo com o Jquery alterando o css desse ativo #id

Agora eu estou usando:

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

Gera:

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

Eu gostaria de gerar:

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

Isso é possível? Eu tentei:

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

Mas isso gera:

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

Você estava no caminho certo. Não sei por que não funcionou para você, pois seu código possui um erro de digitação que produziria um } expected erro. A seguir, é o que você está procurando:

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

Que produz o seguinte HTML:

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

Edit: Acabei de perceber qual é o problema, porque estava lendo errado o que você tentou. Você está usando a sobrecarga incorreta para transmitir o elemento html id. Você provavelmente está passando o new { id="blah" } param no parâmetro routeValues, que fará com que seja usado ao criar o link da rota, em vez do parâmetro htmlAttributes que é o que você deseja.

Eu acho que você está usando:

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

Quando o que você precisa usar é a seguinte sobrecarga, como fiz acima na minha resposta:

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

O que garante que new { id="blah" } está sendo passado para o parâmetro htmlAttributes.

52
Kelsey

Tente o seguinte:

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

Basicamente, está ocorrendo um erro porque não há sobrecarga de método com a assinatura desejada.

A assinatura mais próxima da que você precisa é

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

)

Você está passando o atributo id para o valor da rota, e é por isso que está fornecendo o href engraçado. passe nulo para o valor da rota e adicione seus atributos htmlat

2
MrBliz

tente isso

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