Question

Comment puis-je faire un RouteLink dans un HtmlHelper personnalisé? Je sais comment faire dans une vue partielle, mais je veux construire un nouveau lien dans une méthode d'extension HtmlHelper personnalisée avec l'utilisation d'un RouteLink. Comment y arriver?

Mise à jour: J'ai remarqué HtmlHelper.GenerateRouteLink. Mais qu'est-ce que je dois mettre en tant que paramètres?

Était-ce utile?

La solution

Voici un exemple. Supposons que vous voulez envelopper les liens dans une étiquette de div avec une classe donnée afin que vos regards html résultant comme ceci:

<div class="foo"><a href="/home/index">Some text</a></div>

Vous pourriez écrire la méthode d'extension suivante:

public static class HtmlExtensions
{
    public static MvcHtmlString CustomRouteLink(
        this HtmlHelper htmlHelper, 
        string className, 
        string linkText, 
        object routeValues
    )
    {
        var div = new TagBuilder("div");
        div.MergeAttribute("class", className);
        div.InnerHtml = htmlHelper.RouteLink(linkText, routeValues).ToHtmlString();
        return MvcHtmlString.Create(div.ToString());
    }
}

qui pourrait être utilisé comme ceci:

<%= Html.CustomRouteLink("foo", "Some text", 
    new { action = "index", controller = "home" }) %>

et cela produira le balisage souhaité. Toute autre de RouteLink surcharge pourrait être utilisé si nécessaire.

Autres conseils

Une fois que vous obtenez une instance de la UrlHelper, vous devriez être en mesure de faire ce que vous voulez faire dans votre méthode HtmlHelper

UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top