一条asp.net mvc导航条以及高亮实现思路

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的代码为:
     <ul id="menu">
       <% foreach (navigation.Helper.NavigationEntity entity in (ViewData["navigation"] as IList<navigation.Helper.NavigationEntity>))
          { %>
             <li>
                <%: Html.ActionLink(entity.Name, entity.ActionName, entity.ControllerName, new { @class=entity.ClassName})%>
             </li>
       <%} %>
     </ul>


 2,使用自定义ActionFilterAttribute提供导航信息。


    优点在于:
    1,每个链接对应一个action,这里可以访问实际的controller,action名称。
    可以往ViewData扔数据。
    2,每个自定义ActionFilterAttribute可以有自己的导航信息集,
    即是可以决定包含那些可用controller,action。从模块或者功能块自管理自己的
    导航菜单来说,方便控制。
    3,利用了FilterAttribute的方便性。
    ActionFilterAttribute的四个切入时机,随便选除了OnResultExecuted的其他三个中某一个。

 
  
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();
}
}

本实例改写自vs2010自动生成的asp.net mvc 2.0程序。css文件需要调整,因为css文件写了ul li.a的各种样式。不改,效果不明显。

转载于:https://www.cnblogs.com/wusong/archive/2011/03/22/1991658.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值