179 votes

Mettre du HTML à l'intérieur du Html.ActionLink(), plus Aucun Lien Texte?

J'ai deux questions:

  1. Je me demande comment je peux ne pas afficher de lien de texte lors de l'utilisation d' Html.ActionLink() dans un MVC vue (en fait, c'est - Site.Master).

Il n'y a pas une version surchargée qui ne permettent pas de lien texte, et quand j'ai essayer de passer en seulement un vide string, le compilateur me dit qu'il a besoin d'une chaîne non vide.

Comment puis-je résoudre ce problème?

  1. J'ai besoin de mettre <span> balises à l'intérieur de la balise d'ancrage, mais il ne fonctionne pas avec Html.ActionLink();. J'aimerais voir le résultat suivant:

    Durée de texte

Comment puis-je mettre des balises à l'intérieur de la balise d'ancrage dans ASP.NET MVC?

349voto

David Points 7618

Au lieu d'utiliser le format Html.ActionLink vous pouvez effectuer le rendu d'une url par Url.Action

<a href="<%= Url.Action("Index", "Home") %>"><span>Text</span></a>
<a href="@Url.Action("Index", "Home")"><span>Text</span></a>

Et pour faire une url vide vous pourriez avoir

<a href="<%= Url.Action("Index", "Home") %>"></a>
<a href="@Url.Action("Index", "Home")"></a>

16voto

tvanfosson Points 268301

Une coutume HtmlHelper extension est une autre option. Note: ParameterDictionary est mon propre type. Il est possible de substituer un RouteValueDictionary mais vous auriez à construire différemment.

public static string ActionLinkSpan( this HtmlHelper helper, string linkText, string actionName, string controllerName, object htmlAttributes )
{
    TagBuilder spanBuilder = new TagBuilder( "span" );
    spanBuilder.InnerHtml = linkText;

    return BuildNestedAnchor( spanBuilder.ToString(), string.Format( "/{0}/{1}", controllerName, actionName ), htmlAttributes );
}

private static string BuildNestedAnchor( string innerHtml, string url, object htmlAttributes )
{
    TagBuilder anchorBuilder = new TagBuilder( "a" );
    anchorBuilder.Attributes.Add( "href", url );
    anchorBuilder.MergeAttributes( new ParameterDictionary( htmlAttributes ) );
    anchorBuilder.InnerHtml = innerHtml;

    return anchorBuilder.ToString();
}

15voto

Goran Obradovic Points 4374

Ici est faible (et sale) solution de contournement dans le cas où vous avez besoin d'utiliser ajax ou une caractéristique que vous ne pouvez pas utiliser lors de la prise de lien manuellement (à l'aide de la balise):

<%= Html.ActionLink("LinkTextToken", "ActionName", "ControllerName").ToHtmlString().Replace("LinkTextToken", "Refresh <span class='large sprite refresh'></span>")%>

Vous pouvez utiliser n'importe quel texte au lieu de "LinkTextToken", il est là seulement pour être remplacé, il est seulement important de ne pas se produire n'importe où ailleurs à l'intérieur de actionlink.

13voto

Craig Stuntz Points 95965

Suffit d'utiliser Url.Action au lieu de Html.ActionLink:

<li id="home_nav"><a href="<%= Url.Action("ActionName") %>"><span>Span text</span></a></li>

1voto

Terry Kernan Points 506

J'ai pensé que cela pourrait être utile lors de l'utilisation de bootstrap et certains glypicons:

<a class="btn btn-primary" 
    href="<%: Url.Action("Download File", "Download", 
    new { id = msg.Id, distributorId = msg.DistributorId }) %>">
    Download
    <span class="glyphicon glyphicon-paperclip"></span>
</a>

Cela permettra de montrer une étiquette, avec un lien vers un contrôleur, avec une belle icône en forme de trombone sur elle pour représenter un lien de téléchargement, et le code html de sortie est maintenu propre

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X