Am Ende hatte ich eine benutzerdefinierte Erweiterungsmethode. Wenn Sie versuchen, HTML in ein Ankerobjekt einzufügen, kann der Linktext entweder links oder rechts vom inneren HTML stehen. Aus diesem Grund habe ich mich dafür entschieden, Parameter für linkes und rechtes inneres HTML bereitzustellen - der Linktext befindet sich in der Mitte. Sowohl linkes als auch rechtes inneres HTML sind optional.
Erweiterungsmethode ActionLinkInnerHtml:
public static MvcHtmlString ActionLinkInnerHtml(this HtmlHelper helper, string linkText, string actionName, string controllerName, RouteValueDictionary routeValues = null, IDictionary<string, object> htmlAttributes = null, string leftInnerHtml = null, string rightInnerHtml = null)
{
// CONSTRUCT THE URL
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
var url = urlHelper.Action(actionName: actionName, controllerName: controllerName, routeValues: routeValues);
// CREATE AN ANCHOR TAG BUILDER
var builder = new TagBuilder("a");
builder.InnerHtml = string.Format("{0}{1}{2}", leftInnerHtml, linkText, rightInnerHtml);
builder.MergeAttribute(key: "href", value: url);
// ADD HTML ATTRIBUTES
builder.MergeAttributes(htmlAttributes, replaceExisting: true);
// BUILD THE STRING AND RETURN IT
var mvcHtmlString = MvcHtmlString.Create(builder.ToString());
return mvcHtmlString;
}
Anwendungsbeispiel:
Hier ist ein Anwendungsbeispiel. Für dieses Beispiel wollte ich nur das innere HTML auf der rechten Seite des Linktextes ...
@Html.ActionLinkInnerHtml(
linkText: "Hello World"
, actionName: "SomethingOtherThanIndex"
, controllerName: "SomethingOtherThanHome"
, rightInnerHtml: "<span class=\"caret\" />"
)
Ergebnisse:
Dies führt zu folgendem HTML ...
<a href="/SomethingOtherThanHome/SomethingOtherThanIndex">Hello World<span class="caret" /></a>