web-dev-qa-db-fra.com

ActionLink avec plusieurs paramètres

Je veux créer une URL comme /?name=Macbeth&year=2011 avec mon ActionLink que j'ai essayé de faire comme ceci:

<%= Html.ActionLink("View Details", "Details", "Performances", new { name = item.show }, new { year = item.year })%>

mais ça ne marche pas. Comment puis-je faire cela?

30
Cameron

La surcharge que vous utilisez fait que la valeur year se retrouve dans les attributs html du lien (vérifiez votre source rendue).

La signature de surcharge ressemble à ceci:

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

Vous devez mettre vos deux valeurs de route dans le dictionnaire RouteValues comme ceci:

Html.ActionLink(
    "View Details", 
    "Details", 
    "Performances", 
    new { name = item.show, year = item.year }, 
    null
)
61
Mikael Östberg

En plus de la réponse de Mikael Östberg, ajoutez quelque chose comme ça dans votre global.asax

routes.MapRoute(
    "View Details",
    "Performances/Details/{name}/{year}",
    new {
        controller ="Performances",
        action="Details", 
        name=UrlParameter.Optional,
        year=UrlParameter.Optional
    });

puis dans votre manette

// the name of the parameter must match the global.asax route    
public action result Details(string name, int year)
{
    return View(); 
}
6
hidden

Basé sur la réponse de Mikael Östberg et juste au cas où les gens auraient besoin de savoir comment il fonctionne avec attr html. Voici un autre exemple, référence de ActionLink

@Html.ActionLink("View Details", 
"Details", 
"Performances", 
  new { name = item.show, year = item.year }, 
  new {@class="ui-btn-right", data_icon="gear"})


@Html.ActionLink("View Details", 
"Details", 
"Performances", new RouteValueDictionary(new {id = 1}),new Dictionary<string, object> { { "class", "ui-btn-test" }, { "data-icon", "gear" } })
2
Jansen