2010-01-21 3 views
0

Nos designers ont mis au point des styles de bouton pour une application qui nécessitent l'ajout de <span> tags à l'intérieur des <a> étiquettes de nos liens.Comment faire pour modifier le rendu des liens dans ASP.NET MVC?

Dans ASP.NET, nous avons implémenté ceci en ajoutant une entrée App_Browsers pour Link Buttons.

Comment ferais-je cela dans ASP.NET MVC? J'ai envisagé de créer mes propres versions de toutes les différentes fonctions d'aide HTML pour créer des liens ActionLinks et RouteLinks, mais cela semble être une façon assez brutale de faire les choses.

Existe-t-il une façon élégante de le faire?

Je sais que nous pourrions écrire un simple jQuery pour le faire, mais nous préférerions que le balisage sorte du serveur correctement en premier lieu.

Répondre

1

En fait, je pense qu'écrire une nouvelle aide est exactement comme je le ferais. Il me semble que c'est exactement ce pour quoi ils sont là et ça les rend très réutilisables aussi.

+0

Salut Griegs. Mon souci avec ceci est qu'il y a tellement de différentes versions des méthodes que j'aurai beaucoup de variations à écrire. À mesure que de nouvelles verisons seront ajoutées, je devrais suivre le rythme. Toute idée s'il y a un bon endroit pour «post-traiter» le code HTML avant qu'il ne soit envoyé? Merci. –

+0

Semble un problème typique une fois que les concepteurs s'impliquent oui. Quant à un bon endroit pour le faire? Cela ne me vient pas à l'esprit. Je regarderais toutes les variations et verrais s'il y a une aide que je pourrais écrire qui me donnerait une base. Puis écris un autre assistant qui pourrait étoffer la base pour me donner d'autres. Ces sortes de choses sont toujours douloureuses. – griegs

+0

Vous pouvez construire une base, la chose dans votre ancre, construire dessus, puis écrire une aide qui prend la durée comme argument peut-être. – griegs

1

Vous pouvez toujours écrire un méthode d'extension, qui prend un autre (l'un des plus intégrés) comme argument, et le wrappes <span> autour de votre texte de lien avant de l'appeler. Il devrait être assez facile à faire avec lambdas ...

public static string SpanLink(this HtmlHelper helper, 
    string linkText, object args, Action<string> action) 
    where TController : IController 
{ 
    action("<span>" + linkText + "</span>", args); 
} 

Et pour l'appeler:

<%= Html.SpanLink<HomeController>("link text", (s) => Html.ActionLink<HomeController>(c => c.Index(s)); 

(Ce code est tapé directement dans le champ de réponse SO - J'ai même pas vérifié pour s'assurer qu'il compile.Prenez donc avec moi si cela ne fonctionne pas au premier essai ...)

+0

Cela semble intéressant! Je vais essayer, merci. –

Questions connexes