Html.ActionLink with a specified HTML id?

Peter picture Peter · Sep 2, 2010 · Viewed 51.4k times · Source

I'd like to give the like generated with an Html.ActionLink an HTML id so I can change the CSS depending on where I am. I have a MasterPage with a set of links and I'd like to distinguish the active "Tab" with Jquery changing the css of that active #id

Right now I'm using:

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

It generates:

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

I'd like to generate:

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

Is that possible? I've tried:

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

But that generates:

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

Answer

Kelsey picture Kelsey · Sep 2, 2010

You were on the right track. I am not sure why it didn't work for you as your code has a typo which would have produced a } expected error. The following is what you are looking for:

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

Which produces teh following HTML:

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

Edit: I just realized what the issue is because I was mis-reading what you tried. You are using the wrong overload to pass in the id html element. Your probably passing the new { id="blah" } param into the routeValues parameter, which will cause it to be used when building the route link, rather than the htmlAttributes paramater which is what you want.

I think you are using:

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

When what you need to use is the following overload like I did above in my answer:

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

Which makes sure new { id="blah" } is being passed into the htmlAttributes param.