2

私はこれがいくつかの異なる方法で行われるのを見てきましたが、特に私が探しているものではありません。現在、ナビゲーションシステムで現在のページを強調表示するためにActionLinkに「class='currentPage'」を追加するカスタム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());
        }

何か案は?

4

1 に答える 1

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);
于 2012-04-10T00:19:51.683 に答える