1本asp.Netmvcナビゲーションバーおよびハイライト実装構想

15385 ワード

1.ナビゲーション領域は、マスターページまたはユーザーコントロールエージェントを介しています.
このセクションでは、バックグラウンドで提供されるディレクトリ情報を読み込み、controller、action、className、その他のプロパティを含むリンクを動的に生成します.大まかなクラスは、public class NavigationEntity{public string ControllerName{get;set;}        public string ActionName { get; set; }        public string Name { get; set; }        public string ClassName { get; set; }}viewのコードは、<%foreach(navigation.Helper.NavigationEntity in(ViewData["navigation"]as IList){%>
  • <%:Html.ActionLink(entity.Name,entity.ActionName,entity.ControllerName,new{@class=entity.ClassName})%>            
  •        <%} %>    
    2.カスタムActionFilterAttributeを使用してナビゲーション情報を提供します.
    利点は、1、各リンクはactionに対応し、ここでは実際のcontroller、action名にアクセスできることです.ViewDataにデータを投げることができます.2.各カスタムActionFilterAttributeは、使用可能なコントローラ、actionを含むことを決定できる独自のナビゲーション情報セットを有することができる.モジュールや機能ブロックが独自のナビゲーションメニューを管理することで、制御が容易になります.3,FilterAttributeの利便性を利用しました.ActionFilterAttributeの4つの切り込みタイミングは、OnResultExecutedを除く3つのうちいずれかを任意に選択します.
    
      
        
    public class NavigationAttibute : ActionFilterAttribute
    {
    private IList < NavigationEntity > _navigationColletion;
    private const string _selectedClassName = " higthLight " ;
    private const string _unSelectedClassName = " unLight " ;

    public NavigationAttibute()
    {
    _navigationColletion
    = new List < NavigationEntity > ();

    _navigationColletion.Add(
    new NavigationEntity()
    {
    ControllerName
    = " Home " ,
    ActionName
    = " Index " ,
    ClassName
    = _unSelectedClassName,
    Name
    = " "
    });
    _navigationColletion.Add(
    new NavigationEntity()
    {
    ControllerName
    = " Home " ,
    ActionName
    = " About " ,
    ClassName
    = _unSelectedClassName,
    Name
    = " "
    });
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
    base .OnResultExecuting(filterContext);
    string controller = filterContext.RouteData.Values[ " controller " ] as string ;
    string action = filterContext.RouteData.Values[ " action " ] as string ;
    foreach (NavigationEntity entity in _navigationColletion)
    {
    if (entity.ControllerName == controller && entity.ActionName == action)
    {
    entity.ClassName
    = _selectedClassName;
    }
    else
    {
    entity.ClassName
    = _unSelectedClassName;
    }
    }
    filterContext.Controller.ViewData[
    " navigation " ] = _navigationColletion;
    }

    }

    3,actionで使う
    
      
        
    public class HomeController : Controller
    {
    [NavigationAttibute]
    public ActionResult Index()
    {
    ViewData[
    " Message " ] = " ASP.NET MVC! " ;
    ViewData[
    " Position " ] = RouteData.Values[ " controller " ] + " _ " + RouteData.Values[ " action " ];
    // , NavigationAttibute
    IList < NavigationEntity > list = ViewData[ " navigation " ] as IList < NavigationEntity > ;
    return View();
    }

    [NavigationAttibute]
    public ActionResult About()
    {
    ViewData[
    " Position " ] = RouteData.Values[ " controller " ] + " _ " + RouteData.Values[ " action " ];
    // , NavigationAttibute
    IList < NavigationEntity > list = ViewData[ " navigation " ] as IList < NavigationEntity > ;
    return View();
    }
    }

    この例はvs 2010から自動的に生成するaspを書き換える.Netmvc 2.0プログラム.cssファイルはul liと書かれているので調整する必要があります.aのいろいろなスタイル.変更しないで、効果は明らかではありません.