陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万

 以前做菜单都是取出数据后直接用菜单节点构建菜单,今天发现原来可以换为xml为数据源,做了一个简单的实验了一下,发现比直接建菜单舒服些,写出来看看

注:其中SystemMenuInfo为实体类,我就不写出来了,

 看来菜单还是依赖XML结构才是正道

 数据表简单结构

SystemMenuID SystemMenuName ParentID Url
1 黑龙江省 0 #
2 哈尔滨市 1 #
3 五常市 2 #
4 辽宁省 0 #
5 大连市 4 #

public partial class StartPage : System.Web.UI.Page
{
    SystemMenu sm = new SystemMenu();
    IList<SystemMenuInfo> sms;
    public void RecursionXml(SystemMenuInfo smi, XmlDocument xd, XmlElement xe)
    {
        XmlElement menuItem = xd.CreateElement("menuItem");
        menuItem.SetAttribute("SystemMenuID", smi.SystemMenuID);
        menuItem.SetAttribute("SystemMenuName", smi.SystemMenuName);
        menuItem.SetAttribute("ParentID", smi.ParentID);

        menuItem.SetAttribute("Url", smi.Url);
        xe.AppendChild(menuItem);
        foreach (SystemMenuInfo smiChild in sms)
        {

            if (smiChild.ParentID == smi.SystemMenuID)
            {
                RecursionXml(smiChild, xd, menuItem);
            }
        }
    }
    public string CreateMenu()
    {
        sms = sm.GetSystemMenus();
        XmlDocument xd = new XmlDocument();
        XmlNode menu = xd.CreateElement("menu");
        xd.AppendChild(menu);

        foreach (SystemMenuInfo smi in sms)
        {
            if (smi.ParentID == "0")
            {
                RecursionXml(smi, xd, (XmlElement)menu);
            }
        }
        return xd.OuterXml;

    }
    public void BindMenu()
    {

        //XmlSource.DataFile = "*.xml";当然如果你依赖与实际的xml文件也是可以的
        XmlSource.Data = CreateMenu();
        XmlSource.DataBind();
        XmlSource.XPath = "menu/menuItem";
        TreeView1.DataSource = XmlSource;
        TreeView1.DataBind();
        Menu2.DataSource = XmlSource;
        Menu2.DataBind();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        BindMenu();
    }
}

 

 

        <asp:Menu ID="Menu2" runat="server" Orientation="Horizontal" StaticEnableDefaultPopOutImage="false">
            <DataBindings>
                <asp:MenuItemBinding ValueField="SystemMenuID" TextField="SystemMenuName"  NavigateUrlField="Url" />
            </DataBindings>
        </asp:Menu>
        <asp:XmlDataSource runat="server" ID="XmlSource" />
        <asp:TreeView ID="TreeView1" runat="server">
            <DataBindings>
                <asp:TreeNodeBinding ValueField="SystemMenuID" TextField="SystemMenuName"  NavigateUrlField="Url" />
            </DataBindings>
        </asp:TreeView>

 

然后 你就可以看效果了:)

 

 

 

public class SystemMenu
{
    public IList<SystemMenuInfo> GetSystemMenus()
    {
        IList<SystemMenuInfo> ss = new List<SystemMenuInfo>();

 

        SystemMenuInfo s1 = new SystemMenuInfo();
        s1.SystemMenuID = "1";
        s1.SystemMenuName = "黑龙江省";
        s1.ParentID = "0";
        s1.Url = "#";

        SystemMenuInfo s2 = new SystemMenuInfo();
        s2.SystemMenuID = "2";
        s2.SystemMenuName = "哈尔滨市";
        s2.ParentID = "1";
        s2.Url = "#";

        SystemMenuInfo s3 = new SystemMenuInfo();
        s3.SystemMenuID = "3";
        s3.SystemMenuName = "五常市";
        s3.ParentID = "2";
        s3.Url = "#";

        SystemMenuInfo s4 = new SystemMenuInfo();
        s4.SystemMenuID = "4";
        s4.SystemMenuName = "辽宁省";
        s4.ParentID = "0";
        s4.Url = "#";

        SystemMenuInfo s5 = new SystemMenuInfo();
        s5.SystemMenuID = "5";
        s5.SystemMenuName = "大连市";
        s5.ParentID = "4";
        s5.Url = "#";

        ss.Add(s1);
        ss.Add(s2);
        ss.Add(s3);
        ss.Add(s4);
        ss.Add(s5);
        return ss;
    }
}

public class SystemMenuInfo
{
    public string SystemMenuID;
    public string SystemMenuName;
    public string ParentID;
    public string Url;
}

 

posted on   宏宇  阅读(1382)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2008-01-08 Rational Rose和UML可视化建模基础
< 2009年1月 >
28 29 30 31 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

点击右上角即可分享
微信分享提示