I want to create a URL like /?name=Macbeth&year=2011
with my ActionLink
which I have tried doing like so:
<%= Html.ActionLink("View Details", "Details", "Performances", new { name = item.show }, new { year = item.year })%>
but it doesn't work. How do I do this?
Yes, there is a difference. Html. ActionLink generates an <a href=".."></a> tag whereas Url. Action returns only an url.
You'll have to serialize your model as a JSON string, and send that to your controller to turn into an object. Please don't format with snippets when the language used is not displayable by them. It doesn't improve the answer and makes your answer more cluttered. Regular code blocks will work fine.
In addition to Mikael Östberg answer add something like this in your global.asax
routes.MapRoute( "View Details", "Performances/Details/{name}/{year}", new { controller ="Performances", action="Details", name=UrlParameter.Optional, year=UrlParameter.Optional });
then in your controller
// the name of the parameter must match the global.asax route public action result Details(string name, int year) { return View(); }
The overload you are using makes the year
value end up in the html attributes of the link (check your rendered source).
The overload signature looks like this:
MvcHtmlString HtmlHelper.ActionLink( string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes )
You need to put both your route values in to the RouteValues
dictionary like this:
Html.ActionLink( "View Details", "Details", "Performances", new { name = item.show, year = item.year }, null )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With