2015-02-12 51 views
0

我想通过编程方式创建一个html.actionlink。到目前为止,我已经做出这样的事情通过扩展方法向菜单添加引导图标

public static class MenuExtensions 
{ 
    public static MvcHtmlString MenuItem(
     this HtmlHelper htmlHelper, 
     string text, 
     string action, 
     string controller 
     ) 
    { 
     var li = new TagBuilder("li"); 
     RouteData routeData = htmlHelper.ViewContext.RouteData; 
     string currentAction = routeData.GetRequiredString("action"); 
     string currentController = routeData.GetRequiredString("controller"); 
     if ( 
      string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase)) 
     { 
      li.AddCssClass("active"); 
     } 
     li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString(); 
     return MvcHtmlString.Create(li.ToString()); 
    } 
} 

,并考虑

@Html.MenuItem("Insurance Providers", "Index", "Payer") 

这会产生这样的

<li><a href="/Payer">Insurance Providers</a></li> 

的HTML现在我想包括锚标记内bootstrapIcon ,我的理想输出是这样的

<li><a href="/Payer"> 
<i class="linecons-desktop"></i> 
    <span class="title">Insurance Providers</span> 
    </a></li> 

任何人都可以告诉我如何实现这一目标?

+0

将它总是产生''或者你会需要传递''标签的类名称? – 2015-02-12 06:13:40

+0

@StephenMuecke我想通过类名:) – Athul 2015-02-12 06:30:28

回答

1

您将需要与Url.Action帮助手动构造<a>标签生成正确的URL

public static MvcHtmlString MenuItem(this HtmlHelper htmlHelper, string text, string action, string controller, string className) 
{ 
    StringBuilder html = new StringBuilder(); 

    TagBuilder i = new TagBuilder("i"); 
    i.AddCssClass("className"); 
    StringBuilder html = new StringBuilder(); 
    html.Append(i.ToString()); 

    TagBuilder span = new TagBuilder("span"); 
    span.InnerHtml = text; 
    span.AddCssClass("title"); 
    html.Append(span.ToString()); 

    UrlHelper urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); 
    string href = urlHelper.Action(action, controller); 

    TagBuilder a = new TagBuilder("a"); 
    a.MergeAttribute("href", href); 
    a.InnerHtml = html.ToString(); 

    TagBuilder li = new TagBuilder("li"); 
    li.InnerHtml = a.ToString(); 

    return MvcHtmlString.Create(li.ToString()); 
} 
相关问题