2012-04-09 11 views
2

これはいくつかの異なる方法で行われていますが、特に私が探しているものではありません。現在、ナビゲーションシステムで現在のページを強調表示するためにActionLinkに「class = 'currentPage'」を追加するカスタムHtmlHelperがあります。カスタムHtmlHelper(アクションリンク内の画像)

public static MvcHtmlString MenuItem(
      this HtmlHelper htmlHelper, 
      string text, 
      string action, 
      string controller 
     ) 
     { 
      string value; 
      var routeData = htmlHelper.ViewContext.RouteData; 
      var currentAction = routeData.GetRequiredString("action"); 
      var currentController = routeData.GetRequiredString("controller"); 
      if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) && 
       string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase)) 
      { 
       value = htmlHelper.ActionLink(text, action, new { controller = controller }, new { @class = "currentPage" }).ToHtmlString(); 
       return MvcHtmlString.Create(value.ToString()); 
      } 

      value = htmlHelper.ActionLink(text, action, controller).ToHtmlString(); 
      return MvcHtmlString.Create(value.ToString()); 
     } 

これは素晴らしく機能しますが、私は各メニュー項目に関連付けられた画像も持っている管理領域を持っています。画像は、そのように、リンク内に配置されている:

<li><a href="/Admin/Blog"><img src="/Content/images/icons/page_edit.png" alt="" /> Blog</a></li> 

私はActionLinkの内部の画像を追加します「のMenuItem」のオーバーライドメソッドを作成したいが、私は少し困惑しています。現在、私は外部にimgタグを置く次のものがあります...

public static MvcHtmlString MenuItem(
      this HtmlHelper htmlHelper, 
      bool isAdmin, 
      string text, 
      string action, 
      string controller 
     ) 
     { 
      string value; 
      var routeData = htmlHelper.ViewContext.RouteData; 
      var currentAction = routeData.GetRequiredString("action"); 
      var currentController = routeData.GetRequiredString("controller"); 

      value = "<img src='/Content/images/admin_icons/" + text + ".png' alt='' /> "; 

      if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) && 
       string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase)) 
      { 
       value += htmlHelper.ActionLink(text, action, new { controller = controller }, new { @class = "currentPage" }).ToHtmlString(); 

      } 
      else 
      { 
       value += htmlHelper.ActionLink(text, action, controller).ToHtmlString(); 
      } 

      return MvcHtmlString.Create(value.ToString()); 
     } 

アイデアはありますか?

答えて

0

UrlHelperを使用してURLを生成し、その文字列をフォーマットします。私の例では、条件付きクラスの追加は扱いませんが、それは簡単に含めることができます。

 var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); 
     var url = urlHelper.Action(action, controller); 
     var imgUrl = urlHelper.Content("~/Content/images/icons/page_edit.png"); 
     var html = string.Format("<li><a href=\"{0}\"><img src=\"{2}\" alt=\"\" />{1}</a></li>", url, text, imgUrl); 
     return new MvcHtmlString(html); 
+0

VARのhtml = String.Formatの( "

  • \"\"{1}
  • "、URL、テキスト、imgUrl)。 "インデックス(ゼロベース)は、ゼロより大きく、引数リストのサイズより小さくなければなりません。"これは正しくフォーマットされていますか? –

    +0

    数字が分かっていなかった。素晴らしい作品です、ありがとう! –

    +0

    おっと、私もそれを修正しました – Iain

    関連する問題