RouteLink à HtmlHelper?
-
29-09-2019 - |
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?
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);