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 = "" } ); 9 Answers
What you want is this overload :
//linkText, actionName, controllerName, routeValues, htmlAttributes <%=Html.ActionLink("Details", "Details", "Product", new {id = item.ID}, null) %> 7With 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!
2I 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 ) 1If 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:
2You're hitting the wrong the overload of ActionLink. Try this instead.
<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %> try it it is working fine
<%:Html.ActionLink("Details","Details","Product", new {id=item.dateID },null)%> 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> 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) this code worked for me in partial view:
<a href="/Content/Index?SubCategoryId=@item.Id">@item.Title</a> 1