一般管理系统往往需要通过权限管理菜单(是否显示,是否Enable),再加上导航树控件TreeView,形成灵活的导航控制方案。
采用MasterPage是一个不错的思路,可以把Menu控件和TreeView控件都在其中放置,并且提供相应的数据源。如果Menu不经常变化(正常情况)就可以把Menu及其子菜单做成静态的,而TreeView内容根据菜单项来动态加载。
界面:
代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class MasterPagePerson : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
// 权限控制
if (Session["Previlege"].ToString() == "Person")
{
Menu1.Enabled = false;
Menu2.Visible = false;
smsResultCheck.Provider = System.Web.SiteMap.Providers["smpResultCheck"];//menu3
}
else
{
Menu1.Enabled = true;
Menu2.Visible = true;
smsResultCheck.Provider = System.Web.SiteMap.Providers["smpResultCheck"];//menu3
}
//导航树内容配置
if(Session["TreeVProvider"]!=null)
this.SiteMapDataSource1.Provider = System.Web.SiteMap.Providers[Session["TreeVProvider"].ToString()];
else
smsResultCheck.Provider = System.Web.SiteMap.Providers["smpResultCheck"];
}
protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
{
Session["TreeVProvider"] = "CodeMaintain";
this.SiteMapDataSource1.Provider = System.Web.SiteMap.Providers[Session["TreeVProvider"].ToString()];
}
protected void Menu2_MenuItemClick(object sender, MenuEventArgs e)
{
string m = Menu2.SelectedItem.Text;
if (m.Equals("经费管理"))
{
Session["TreeVProvider"] = "ProjectFee";
this.SiteMapDataSource1.Provider = System.Web.SiteMap.Providers[Session["TreeVProvider"].ToString()];
}
}
protected void Menu3_MenuItemClick(object sender, MenuEventArgs e)
{
string m = Menu3.SelectedItem.Text;
if (m.Equals("部门审核"))
{
Session["TreeVProvider"] = "smpResultCheckDepartment";
this.SiteMapDataSource1.Provider = System.Web.SiteMap.Providers[Session["TreeVProvider"].ToString()];
}
}
}
运行效果图:
当然,需要配置web.config。
<siteMap enabled="true ">
<providers>
<add name="CodeMaintain" description="SiteMap provider that reads in .sitemap files. " type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a " siteMapFile="CodeMaintain.sitemap "/>
<add name="ProjectFee" description="SiteMap provider that reads in .sitemap files. " type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a " siteMapFile="ProjectFee.sitemap "/>
<add name="smpResultCheck" description="SiteMap provider that reads in .sitemap files. " type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a " siteMapFile="ResultCheck.sitemap "/>
<add name="smpResultCheckDepartment" description="SiteMap provider that reads in .sitemap files. " type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a " siteMapFile="~/ResultCheck/DepartmentCheck.sitemap "/>
</providers>
</siteMap>