Using Html.ActionLink to call action on different controller

asp.net Mvc

asp.net Mvc Problem Overview


I am trying to navigate between controllers using ActionLink. I will tell my problem with an example.

I am on Index view of Hat controller, and I am trying to use below code to create a link to Details action of Product controller.

<%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }) %>

Instead of creating a link to Details on Product controller, this generates a link to Details action under Hat controller and appends a Length parameter to the end of it:

Hat/Details/9?Length=7

I am not able to use HTML.ActionLink to switch between controllers because of this problem. I will appreciate if you can point me to what I am doing wrong. Thanks

PS: I am using the default route setting that comes with MVC

routes.MapRoute("Default", "{controller}/{action}/{id}", 
                     new { controller = "Home", action = "Index", id = "" } );

asp.net Mvc Solutions


Solution 1 - asp.net Mvc

What you want is this overload :

//linkText, actionName, controllerName, routeValues, htmlAttributes
<%=Html.ActionLink("Details", "Details", 
    "Product", new {id = item.ID}, null) %>

Solution 2 - asp.net Mvc

With that parameters you're triggering the wrong overloaded function/method.

What worked for me:

<%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }, null) %>

It fires HtmlHelper.ActionLink(string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)

I'm using MVC 4.

Cheerio!

Solution 3 - asp.net Mvc

I would recommend writing these helpers using named parameters for the sake of clarity as follows:

@Html.ActionLink(
    linkText: "Details",
    actionName: "Details",
    controllerName: "Product",
    routeValues: new {
		id = item.ID
    },
    htmlAttributes: null
)

Solution 4 - asp.net Mvc

If you grab the MVC Futures assembly (which I would highly recommend) you can then use a generic when creating the ActionLink and a lambda to construct the route:

<%=Html.ActionLink<Product>(c => c.Action( o.Value ), "Details" ) %>

You can get the futures assembly here: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471

Solution 5 - asp.net Mvc

You're hitting the wrong the overload of ActionLink. Try this instead.

<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>

Solution 6 - asp.net Mvc

try it it is working fine

  <%:Html.ActionLink("Details","Details","Product",  new {id=item.dateID },null)%>

Solution 7 - asp.net Mvc

An alternative solution would be to use the Url helper object to set the href attribute of an <a> tag like:

<a href="@Url.Action("Details", "Product",new { id=item.ID }) )">Details</a>

Solution 8 - asp.net Mvc

Note that Details is a "View" page under the "Products" folder.

ProductId is the primary key of the table . Here is the line from Index.cshtml

 @Html.ActionLink("Details", "Details","Products" , new  {  id=item.ProductId  },null)

Solution 9 - asp.net Mvc

this code worked for me in partial view:

<a href="/Content/Index?SubCategoryId=@item.Id">@item.Title</a>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkaivalyaView Question on Stackoverflow
Solution 1 - asp.net MvcÇağdaş TekinView Answer on Stackoverflow
Solution 2 - asp.net MvcStephan VenterView Answer on Stackoverflow
Solution 3 - asp.net MvcPsi-EdView Answer on Stackoverflow
Solution 4 - asp.net MvcJames AveryView Answer on Stackoverflow
Solution 5 - asp.net MvcCraig StuntzView Answer on Stackoverflow
Solution 6 - asp.net Mvcsandy baraskerView Answer on Stackoverflow
Solution 7 - asp.net MvcGeorge ChondrompilasView Answer on Stackoverflow
Solution 8 - asp.net MvcAnotherOneView Answer on Stackoverflow
Solution 9 - asp.net MvcAmin SaadatiView Answer on Stackoverflow