0

css スタイリング用のアクティブなクラスを追加できるように、現在のメニュー項目を追跡する方法についての投稿をここで見つけました。このコードから、Helpers フォルダー内に次のクラスを作成しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;

namespace Project.Helpers
{
  public static class MenuExtensions
  {
    public static MvcHtmlString MenuItem(this HtmlHelper htmlHelper,string text,string action,string controller)
    {
        var li = new TagBuilder("li");
        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))
        {
            li.AddCssClass("active");
        }
        li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
        return MvcHtmlString.Create(li.ToString());
    }
  }
}

次のように、views フォルダーの web.config にアドバイスどおりに行を追加しました。

<add namespace="Project.Helpers" />

しかし、次のコードをレイアウトに追加しようとすると:

@Html.MenuItem("Home", "Home", "Home")

次のエラーが表示されます。

'System.Web.Mvc.HtmlHelper' には 'MenuItem' の定義が含まれておらず、タイプ 'System.Web.Mvc.HtmlHelper' の最初の引数を受け入れる拡張メソッド 'MenuItem' が見つかりませんでした (using ディレクティブがありませんか?またはアセンブリ参照?)

4

0 に答える 0