2014-10-03 5 views
49

Ich möchte eine Schaltfläche mit @Html.ActionLink präsentieren, aber ich muss meine Anwendungsschrift im Text haben.ASP.NET Actionlink mit Glyphicon und Text mit unterschiedlicher Schriftart

Mit diesem Code:

<span> 
    @Html.ActionLink(" Create New", "Create", null, new { @class = "btn btn-warning glyphicon glyphicon-plus-sign" }) 
</span> 

ich meine Taste erhalten, aber die Create New Text erscheint mit dem glyphicon font-family.

Setzt man die glyphicon Klassen in der Spanne nicht alles versuchen

Antwort

114

Sie sollten nicht die glyphicon Klasse dem ein hinzufügen -Etikett.

Von der Bootstrap-Website:

Sie mit anderen Komponenten nicht Icon Klassen direkt kombiniert werden können, nicht mit anderen Komponenten mischen. Sie sollten nicht zusammen mit anderen Klassen für dasselbe Element verwendet werden. Fügen Sie stattdessen einen verschachtelten <span> hinzu und wenden Sie die Symbolklassen auf <span> an.

Nur für leere Elemente Symbolklassen sollten nur für Elemente verwendet werden, die keinen Textinhalt enthalten und keine untergeordneten Elemente enthalten.

Mit anderen Worten: der richtige HTML-Code für diese so, wie Sie würde arbeiten wollen: <a href="#" class="btn btn-warning">test <span class="glyphicon glyphicon-plus-sign"></span></a>

Dies ist die Html.ActionLink Helfer ungeeignet macht. Stattdessen könnte man so etwas verwenden:

<a href="@Url.Action("Action", "Controller")" class="btn btn-warning"> 
    link text 
    <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> 
</a> 
+6

Nizza Lösung, ein kleiner Kommentar Browser-Anzeigeprobleme zu vermeiden: Dies ist die mit einem schließenden Tag wie verwenden anstelle von

+5

Vergessen Sie nicht 'aria-hidden = "true" 'auf dem' span' Element. – Fred

+1

Das hat mir das Leben gerettet. Vielen Dank! – Razor

0

wir haben auf diese nicht ändert. Lassen Sie mich wissen, wenn es funktioniert. Danke

<style> 
    span.super a 
    { 
     font: (your application font) !important; 
    } 

</style> 

<span class="super"> 
    @Html.ActionLink(" Create New", "Create", null, new { @class = "btn btn-warning glyphicon glyphicon-plus-sign" }) 
</span> 
-1

Versuchen Sie es. Verwenden Sie „Htmlattributes“

@Html.ActionLink(" Create New", "Create", null, htmlAttributes: new { @class = "<your class>",@style="font:<your font>" }) 
+0

Das Symbol auf der Schrift basiert, sobald Sie das font-family ändern, entfernt es das Symbol, –

7

Es könnte besser sein, nur den HTML-Code zu schreiben, anstatt zu versuchen, um es mit HtmlHelper.ActionLink funktioniert ...

<span> 
    <a href="@Url.Action("Create")" class="btn btn-warning"> 
     <span class="glyphicon glyphicon-plus-sign"></span> 
     Create New 
    </a> 
</span> 
2

ich mit dem Ansatz der @Url.Action statt @Html.ActionLink, se Beispielcode unten gehen sollte:

<span> 
<a href="@Url.Action("Create", new { @class = "btn btn-warning" })"><span class="glyphicon glyphicon-plus-sign"></span> Create New</a> 
</span> 
+0

Yeap, das ist, was die angenommene Antwort schlägt ... – e4rthdog

2

können Sie einfache Erweiterung verwenden:

private static readonly String SPAN_FORMAT = "<span class=\"{0}\" aria-hidden=\"true\"></span>"; 
private static readonly String A_END = "</a>"; 
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, String iconName, object htmlAttributes = null) 
{ 
    var linkMarkup = htmlHelper.ActionLink(linkText, actionName, routeValues, htmlAttributes).ToHtmlString(); 
    if (!linkMarkup.EndsWith(A_END)) 
     throw new ArgumentException(); 

    var iconMarkup = String.Format(SPAN_FORMAT, iconName); 
    return new MvcHtmlString(linkMarkup.Insert(linkMarkup.Length - A_END.Length, iconMarkup)); 
} 

Verwendung:

Html.ActionLink(" ", "DeleteChart", new { Id = _.Id }, "glyphicon glyphicon-trash") 
4

Hier ist meins.Inspiriert von Andrey Burykin

public static class BensHtmlHelpers 
{ 
    public static MvcHtmlString IconLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, String iconName, object htmlAttributes = null) 
    { 
     var linkMarkup = htmlHelper.ActionLink(linkText, actionName, routeValues, htmlAttributes).ToHtmlString(); 
     var iconMarkup = String.Format("<span class=\"{0}\" aria-hidden=\"true\"></span>", iconName); 
     return new MvcHtmlString(linkMarkup.Insert(linkMarkup.IndexOf(@"</a>"), iconMarkup)); 
    } 
} 
16

Das ist für mich in MVC arbeitet 5:

@Html.ActionLink(" ", "EditResources", "NicheSites", new { ViewBag.dbc, item.locale, ViewBag.domainId, domainName = ViewBag.domaiName }, new {@class= "glyphicon glyphicon-edit" }) 

Der erste Parameter kann nicht leer oder null sein, oder es wird die Luft sprengen.

+1

Danke. Arbeitete für mich. – Vaibhav

+0

Dies funktioniert für einen ActionLink, der keinen Text hat, d. H. Eine Schließen-Schaltfläche, Hinzufügen-Schaltfläche, Subtrahieren-Schaltfläche usw. Was genau ich gesucht habe. Die "akzeptierte" Antwort ist der beste Weg, wenn Ihre Schaltfläche Text enthält. Danke – Nicholas

+0

Auch wenn dies funktioniert, folgt es nicht den Bootstrap-Dokumenten, die besagen, dass die Glyphon-Klasse nicht mit anderen Klassen oder Elementen kombiniert werden sollte, die Text enthalten. –

0

Wie wäre es mit einem Html.BeginForm FormMethod.Get/FormMethod.Post

@using (Html.BeginForm("Action", "Controller", new { Area = "" }, 
FormMethod.Get, htmlAttributes: new { title = "SomeTitle" })) 
{ 
    <button type="submit" class="btn-link" role="menuitem"> 
    <i class="glyphicon glyphicon-plus-sign"></i>Create New</button> 
} 
0

Versuchen Sie es mit!

 
@Html.ActionLink(" Cerrar sesión", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" , @class = "glyphicon glyphicon-log-in" })