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 = "" } );
What you want is this overload :
//linkText, actionName, controllerName, routeValues, htmlAttributes
<%=Html.ActionLink("Details", "Details",
"Product", new {id = item.ID}, null) %>
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!
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
)
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
You'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>
Success story sharing