`

C#——通过XML读取左侧菜单实现Extjs菜单动态加载

阅读更多

      项目中使用到了Extjs,使用了Extjs的边框布局,分为top,west,center。

      左侧为菜单部分,最初直接写在JS文件中,今天看了一下,觉得这样写对于以后扩展来说不是特别好,但用什么去替换呢,想来想去还是用XML文件替换更方便一些,这样方便扩展,也方便以后添加一个新的菜单。

      其实实现原理很简单,关键是C#对于XML文件的解析操作。

      操作的第一步当然是要创建XML文件并制定规则:

<?xml version="1.0" encoding="utf-8" ?>
<menuroot>
  <menu id="menu1" class="x-hidden" name="菜单一">
    <info src="../images/jq.png" alt="菜单栏目一" id="menu1_jq" href="连接地址1" txt="菜单栏目一"/>
  </menu>
  <menu id="menu2" class="x-hidden" name="菜单二">
    <info src="../images/contract.png" alt="菜单栏目二" id="menu2_myFocus" href="连接地址2" txt="菜单栏目一"/>
    <info src="../images/contract.png" alt="菜单栏目二" id="menu2_list" href="连接地址3" txt="菜单栏目二"/>
  </menu>
</menuroot>

 此处定义了二个菜单,以及3个子栏目。在CS文件中只要按照此规则进行文件的读取即可。

public StringBuilder initMenu() 
        {
            StringBuilder sb = new StringBuilder();
            StringBuilder sbJs = new StringBuilder();
            string str = "";

            // 读取配置文件读取XML文件地址
        string menuFile = System.Web.HttpRuntime.AppDomainAppPath.TrimEnd('\\') + System.Web.Configuration.WebConfigurationManager.AppSettings["menufilepath"];
            XmlDocument doc = new XmlDocument();
            doc.Load(menuFile);	// 加载XML文件

            // 读取子节点
            XmlNodeList nodes = doc.DocumentElement.ChildNodes;
            if (nodes != null)
            {
                foreach (XmlNode node in nodes)
                {
                   // 读取菜单节点
                   string menuId = node.Attributes["id"].Value.ToString();               // 菜单ID
                   string menuClass = node.Attributes["class"].Value.ToString();         // 菜单样式
                   string menuName = node.Attributes["name"].Value.ToString();           // 菜单名称

                   // 菜单栏目
                   XmlNodeList childNodes = node.ChildNodes;

                   // 遍历节点
                   sb.Append(this.createMenuInfo(menuId, menuClass, childNodes));

                   sbJs.Append(@"
                        var " + menuId + @" = new Ext.Panel({
                            frame: true,
                            title: '" + menuName + @"',
                            collapsible: true,
                            contentEl: '" + menuId + @"',
                            titleCollapse: true
                        });
                    ");

                   str += menuId + ",";
                }

                str = str.Substring(0, str.Length - 1);

                sbJs.Append(@"
                    //添加左边
                    var west = new Ext.Panel({
                        id: 'action-panel',
                        region: 'west',
                        split: true,
                        collapsible: true,
                        collapseMode: 'mini',
                        header: false,
                        width: 200,
                        minWidth: 200,
                        maxWidth: 200,
                        border: false,
                        baseCls: 'x-plain',
                        items: [" + str + @"]
                    });
                ");
           }

           // 此处于用动态加载一个JS到页面中
           HtmlGenericControl script = new HtmlGenericControl("script");
           script.Attributes.Add("language", "JavaScript");
           script.Attributes.Add("type", "text/javascript");
           script.InnerHtml = sbJs.ToString();                     // 加载要使用的JS菜单
           this.Page.Header.Controls.Add(script);

            return sb;
        }

 这样就实现了动态创建过程,重点就是对于XML文件的读取和XML文件规则的制定

 上面文件方法中的:System.Web.Configuration.WebConfigurationManager.AppSettings["menufilepath"]此处将文件路径保存在WebConfig.xml文件里。

    当然写了这么多东西都是为了在页面展示,页面中要给代码留下来相应的位置,以便加载使用:

<%--初始化左侧菜单--%>
    <div id="leftMenu" runat="server">        
    </div>

 这样后台只需要调用上面的方法来完成内容的加载:

this.leftMenu.InnerHtml = this.initMenu().ToString();

 

这样就完成了通过XML文件来动态加载Extjs左侧菜单功能。

个人博客:

www.52cfml.com

0
0
分享到:
评论

相关推荐

    Extjs动态加载菜单

    在“Extjs动态加载菜单”这个主题中,我们将深入探讨这一功能的实现方式以及相关技术。 首先,动态加载菜单的概念是指菜单项不是在页面加载时一次性全部显示,而是根据用户的操作或特定条件按需加载。这种设计提高...

    extjs实现动态树加载菜单

    通过以上步骤,我们便能在 ExtJS 中实现动态树加载菜单。这种技术不仅优化了用户体验,还提高了应用程序的性能。在实际项目中,你可以根据需求调整配置,例如添加分页、错误处理等功能,以满足更复杂的应用场景。

    Extjs 动态加载树

    标题“Extjs 动态加载树”涉及到的是一个前端开发技术话题,主要集中在使用Extjs框架构建能够动态加载数据的树形结构。Extjs是一个基于JavaScript的组件化UI库,常用于开发富客户端应用。动态加载树(Dynamic ...

    extjs desktop相关 动态生成开始菜单 多级菜单的快捷方式

    标题中的“ExtJS Desktop相关 动态生成开始菜单 多级菜单的快捷方式”涉及到的是一个使用ExtJS框架实现的桌面应用模拟系统,它能够创建类似Windows操作系统的开始菜单,并支持多级菜单结构来快速访问应用程序或功能...

    ExtJS 实现动态处理加载 grid 实现了CRUD还有分页功能

    在本示例中,我们将深入探讨如何使用ExtJS实现动态加载grid,同时实现CRUD(创建、读取、更新、删除)操作和分页功能。 首先,让我们了解什么是Grid。在ExtJS中,Grid是一种数据网格组件,用于展示大量结构化数据。...

    ExtJS构造动态异步加载

    本文将深入探讨如何使用ExtJS构建动态异步加载的树形结构,结合AJAX技术实现JSON数据的高效传输。 首先,我们要理解什么是动态异步加载。在传统的网页开发中,如果一次性加载所有数据,可能会导致页面加载速度慢,...

    extjs实现动态树

    在ExtJS中,这种功能主要通过`Ext.tree.TreePanel`或其现代版本`Ext.tree.View`来实现。 一、ExtJS 动态树基础 1. `Ext.tree.TreePanel`:这是ExtJS中用于创建树形结构的主要组件。它具有丰富的配置项和事件,支持...

    extjs4.0 实现了主页面框架 动态菜单 例子 表单 ajax

    extjs4.0 实现了主页面框架(主框架使用Ext.Viewport,banner使用Ext.panel.Panel,通过toolbar来放置按钮),包括左侧动态菜单实现(采用Ext.tree.Panel)动态从数据库加载数据来显示菜单(后台代码也在了通过json...

    Extjs4.2 MVC 左菜单动态加载功能

    在ExtJS 4.2中实现左菜单的动态加载功能是一项常见的需求,特别是对于大型应用,它能够根据用户的需求按需加载菜单项,从而减少初次加载时的数据量和提升用户体验。 **MVC模式** 1. **Model**:模型层,负责处理...

    EXTJS---完整数据库代码,全网唯一,非常适合EXTJS搭建框架,包含动态树,菜单等

    这个压缩包文件的内容看起来是一个完整的EXTJS项目,包含了数据库交互、动态树结构和菜单功能,并且集成了SpringMVC后端框架以及JDBC数据访问层。 1. **EXTJS动态树**: EXTJS的动态树(TreePanel)组件允许开发者...

    Extjs 下拉菜单实现拼音输入进行检索

    Extjs 下拉菜单实现拼音输入进行检索

    Extjs4.2 动态加载项目(权限模块)

    通过ExtJS的动态加载机制,开发者可以定义哪些类是在需要时才加载的。例如,当用户访问特定功能时,系统才会加载相应的控制器、模型、视图等。这可以通过`Ext.Loader`对象的配置和使用`requires`或`uses`关键字来...

    extjs 实现动态表头

    通过阅读和分析提供的文件内容,我们可以更深入地学习这两种不同的动态表头实现方式,比较它们的优缺点,并从中吸取经验。这不仅可以提升个人的ExtJS技能,也有助于在实际项目中实现更高效、更灵活的数据展示。在...

    Extjs与C#完美接合写法控件源代码

    - ExtJS 应用通常使用AJAX(异步JavaScript和XML)技术与C#后端进行通信,实现页面无刷新的数据交换。这可以通过Ext.Ajax或者Ext.data.Proxy(如RESTful Proxy)实现。 4. **JSON 数据格式**: - C#后端返回的...

    extJS4 MVC demo项目入门

    extJS4 MVC demo项目入门涉及的是前端开发领域的技术要点,主要介绍了extJS4框架中的MVC(Model-View-Controller)模式在实际开发项目中的应用方法,并着重讲述了如何实现前端资源的按需加载和动态加载。在了解这些...

    Extjs结合fckeditor+c#实现新闻发布

    【标题】:“Extjs结合fckeditor+c#实现新闻发布”是一个基于Web的应用开发示例,它展示了如何使用Extjs作为前端框架,与富文本编辑器fckeditor集成,并利用C#后端语言来处理新闻发布功能。这一组合可以创建一个交互...

    动态加载extjs tree

    在ExtJS Tree中实现动态加载,主要涉及以下几个关键概念: 1. **TreeStore**: TreeStore是ExtJS Tree的数据源,负责管理树节点的数据。它可以配置为从服务器异步获取数据,通过`proxy`配置项来指定数据源类型,通常...

    ExtJS4中文教程2 开发笔记 chm

    Extjs4开发笔记(三)——菜单的实现 Extjs4开发笔记(二)——框架的搭建 Extjs4开发笔记(五)——动态grid Extjs4开发笔记(四)——实现登录功能 Extjs4开发笔记(一)——准备工作 关于Extjs4开发笔记(二)的补充说明 ...

    Extjs4.0MVC动态加载controler,完美破解Demo

    extjs4.0中,不想一次性加载所有...extjs4.0好像设计上是一个应用对应一个application,所以原先想通过动态加载多个application来实现上面的需求。但是那样会有其问题出现,即使解决,好像也不是很好,所以改用这种方式

    c#_Extjs4.1

    c#版本Extjs4.1版本的开发,采用Ajax的方式实现Extjs的功能

Global site tag (gtag.js) - Google Analytics