ASP.NET+SQLSERVER动态加载菜单详解
最近在项⽬开发中遇到⼀个很糟糕的问题,解决⽅案⽹上也有不少,但是我采⽤的是三层架构的开发框架,所以⾃⼰也琢磨了⼀个办法。
就是从数据库取出数据,⽣成动态菜单,我这⾥采⽤的是⽤户⾃定义控件,以及递归的⽅法,当然这只是我⾃⼰的⼀个⼩⼩的解决⽅案,还有很多,⽐如AJax ,jquery等
解决步骤以及源码附上给⼤家,希望对⼤家有帮助,同时也希望⼤家能给点建议啥的,共同进步嘛!
第⼀步:新建⾃定义控件⽐如(Menu.ascx)
页⾯代码:
script type="text/javascript">
<!--
navHover = function () {
var lis = ElementById("navmenu").getElementsByTagName("LI");
for (var i = 0; i < lis.length; i++) {
lis[i].onmouseover = function () {
this.className += " iehover";
}
lis[i].onmouseout = function () {
this.className = place(new RegExp(" iehover\\b"),"");
} } }
if (window.attachEvent) window.attachEvent("onload", navHover);
-->
</script>
<ul id="navmenu">
<%= _menu%>
</ul>
第⼆步:在⽤户⾃定义控件上操作前端代码如下:(这⾥CSS样式⾃⼰写去)
第三步:在⽤户⾃定义的后台动态添加html控件,采⽤递归的⽅法可以⽆限极的添加菜单栏,代码如下:
public partial class Meun : System.Web.UI.UserControl
{
protected string _menu =string.Empty;
private static CCourse cc =new CCourse();
protected void Page_Load(object sender,EventArgs e)
{
if (!IsPostBack)
{
BindMenu();
}
}
private void BindMenu()
{
DataTable dt = cc.GetAllClassInfo();//调⽤⽅法,取出数据
if (dt != null && dt.Rows.Count > 0 && dt.Rows[0] != null)
{
StringBuilder sb = new StringBuilder();
DataRow[] rows = dt.Select("ParentID=0");//取出⼀级菜单
foreach (DataRow  drin rows)//遍历所有数据
{
string id = dr["Id"].ToString();//取出ID
string name = dr["ClassName"].ToString();//取出名称
sb.Append("<li><a href=\"#\">" + name +"</a>\r\n");//href可以写需要的链接地址                    sb.Append(GetSubMenu(id, dt));
sb.Append("</li>\r\n");
}
_menu = sb.ToString();//加载列
}
}
private string GetSubMenu(string pid,DataTable dt)
asp查看源码配置ui
{
StringBuilder sb = new StringBuilder();
DataRow[] rows = dt.Select("ParentID=" + pid);//取出⼀级列表⼀下与其⽗级对应的⼦菜单            sb.Append("<ul>\r\n");
foreach (DataRow drin rows)
{
string id = dr["Id"].ToString();
string name = dr["ClassName"].ToString();
//动态加载html控件,实现⽆限极的遍历
sb.Append("<li><a href=\"#\">" + name +"</a>\r\n");
sb.Append(GetSubMenu(id, dt));  //递归调⽤
sb.Append("</li>\r\n");
}
sb.Append("</ul>\r\n");
return sb.ToString();
}
}
第四步:⾸页直接引⽤这个页⾯就可以了,⼤功告成了。
<%@ Register Src="~/MeunHelp/LeftMenu.ascx" tagname="LeftMenu" tagprefix="uc1" %> <div class="lesson_classfiy_nav">//动态菜单栏加载
<ul>
<uc1:LeftMenu ID="LeftMenu1" runat="server" />
</ul>
</div>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。