在日常的项目中往往会需要使用页面的导航路径来记录和跳转模块,现在我们就说一下如何做一个设有子父级的导航。
实现效果如下:
这里结合bootstrap做样式来实现
第一步:编写获取当前模块的子父级节点信息,并且判断用户是否有权限Ian访问。
建立当前模块管理类
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Count.Models.System { public partial class AdminModuleCurrent { /// <summary> /// 当前请求模块的一级类ID /// </summary> public virtual Int32 ParentID { get; set; } /// <summary> /// 当前请求模块的二级类ID /// </summary> public virtual Int32 SecondId { get; set; } /// <summary> /// 页面的导航标题 /// </summary> public virtual string PageTitle { get; set; } /// <summary> /// 页面的导航链接 /// </summary> public virtual string BreadCrumbList { get; set; } } }
当前访问模块的各级关系方法
public static AdminModuleCurrent GetCurrentModuleParentIdByUser(string actionName, string controllerName, string areaName, string CurrentUserLimit) { var list =new BIModule().GetUserAllModule(CurrentUserLimit); if (list != null) return (from info in list where !string.IsNullOrEmpty(areaName) && !string.IsNullOrEmpty(controllerName) && !string.IsNullOrEmpty(actionName) where (info.Module_Area.ToLower() == areaName.ToLower()) && (info.Module_Controller.ToLower() == controllerName.ToLower()) && (info.Module_Action.ToLower() == actionName.ToLower()) select new BIModule(). GetCurrentModule(info)).FirstOrDefault(); else return null; } /// <summary> /// 获得当前请求的模块信 /// </summary> /// <param name="minfo"></param> /// <returns></returns> public AdminModuleCurrent GetCurrentModule(BIModuleInfo minfo) { var breadCrumbList = ""; var breadCrumbList2 = ""; var cmodel = new AdminModuleCurrent(); if (minfo.P_ID == 0) { cmodel.ParentID = Convert.ToInt32(minfo.Module_ID); cmodel.SecondId = Convert.ToInt32(minfo.Module_ID); cmodel.PageTitle = minfo.Module_Name; } else { //判断是否还有父级 var parentmodl =BIModuleInfoFindById(minfo.P_ID); var oneId = 0; if (parentmodl != null) { oneId = Convert.ToInt32(parentmodl.P_ID); var cmurl2 = GetMUrl(parentmodl); breadCrumbList2 = "<li><a href=\"" + cmurl2 + "\">" + parentmodl.Module_Name + "</a><i class=\"fa fa-angle-right\"></i></li>"; } if (oneId > 0) { cmodel.ParentID = oneId; cmodel.SecondId = Convert.ToInt32(minfo.P_ID); cmodel.PageTitle = minfo.Module_Name; var secondparentmodl = BIModuleInfoFindById(Convert.ToInt32(oneId)); if (secondparentmodl != null) { var cmurl1 = GetMUrl(parentmodl); breadCrumbList = "<li><a href=\"" + cmurl1 + "\">" + secondparentmodl.Module_Name + "</a><i class=\"fa fa-angle-right\"></i></li>" + breadCrumbList2; } else { breadCrumbList = breadCrumbList2; } } else { cmodel.ParentID = Convert.ToInt32(minfo.P_ID); cmodel.SecondId = Convert.ToInt32(minfo.Module_ID); cmodel.PageTitle = minfo.Module_Name; breadCrumbList = breadCrumbList2; } } breadCrumbList += "<li><a href=\"javascript:;\">" + minfo.Module_Name + "</a></li>"; cmodel.BreadCrumbList = breadCrumbList; return cmodel; } /// <summary> /// 获得模块的url /// </summary> /// <param name="model"></param> /// <returns></returns> public static string GetMUrl(BIModuleInfo model) { var aurl = ""; var siteurl = IM.Utils.Configuration.AppSettings("SiteUrl"); if (!string.IsNullOrEmpty(model.Module_Url)) { if (model.Module_Url.Contains("http://") == true) { aurl = model.Module_Url; } else { aurl = siteurl + model.Module_Area + "/" + model.Module_Controller + "/" + model.Module_Action; } } else if (!string.IsNullOrEmpty(model.Module_Area) && !string.IsNullOrEmpty(model.Module_Controller) && !string.IsNullOrEmpty(model.Module_Action)) { aurl = siteurl + model.Module_Area + "/" + model.Module_Controller + "/" + model.Module_Action; } else { aurl = "javascript:;"; } return aurl; }
在页面加载的基类中添加对当前访问控制器的验证和读取,并对当前访问前边所建的类进行实例化
/// <summary> /// 在执行action之前处理模块信息 /// </summary> /// <param name="filterContext"></param> protected override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); CurrentAdminUser = IM.Utils.CookieHelper.GetCookie("uname"); this.SiteUrl = IM.Utils.Configuration.AppSettings("SiteUrl"); var actionName = filterContext.RequestContext.RouteData.Values["action"].ToString(); var controllerName = filterContext.RequestContext.RouteData.Values["controller"].ToString(); var areaName = filterContext.RequestContext.RouteData.DataTokens["area"].ToString(); this.CurrentSiteUrl = IM.Utils.Configuration.AppSettings("SiteUrl") + areaName + "/" + controllerName + "/" + actionName; filterContext.Controller.ViewBag.ControllerName = "/" + areaName + "/" + controllerName + "/" + actionName; IsAjaxRequest = filterContext.HttpContext.Request.IsAjaxRequest(); var currentModuleParentId = BIModule.GetCurrentModuleParentIdByUser(actionName, controllerName, areaName, CurrentUserLimit); if (currentModuleParentId == null) { if (IsAjaxRequest) { RedirectJavaScript(filterContext); } else { var strurlerrorurl = @Url.Content("~/Error/ErrorInfo/ErrorAuth"); RedirectUrl(strurlerrorurl, filterContext); } } else { ViewBag.CurrentModuleParentId = currentModuleParentId; } }
视图页面调用
@{ var mParentId = 0; var msecondid = 0; var PageTitle = ""; var BreadCrumbList = ""; if (ViewBag.CurrentModuleParentId != null) { var vModuleParentId = (Count.Models.System.AdminModuleCurrent)ViewBag.CurrentModuleParentId; mParentId = vModuleParentId.ParentID; msecondid = vModuleParentId.SecondId; PageTitle = vModuleParentId.PageTitle; BreadCrumbList = vModuleParentId.BreadCrumbList; } } <div class="row-fluid"> <div class="span12"> <!-- BEGIN PAGE TITLE & BREADCRUMB--> <ul class="breadcrumb"> <li> <i class="fa fa-home"></i> <a href="@Url.Content("~/count")">首页</a> <i class="fa fa-angle-right"></i> </li> @Html.Raw(BreadCrumbList) @* @Html.Partial("_MetronicBreadCrumb", BreadCrumbList)*@ </ul> <!-- END PAGE TITLE & BREADCRUMB--> </div> </div>