如何动态创建一个菜单,要求后台代码实现,针对不同的用户可以显示不同的菜单项,不同的页面不同的需求都用不同的菜单项?

解决方案 »

  1.   

    一般采用第三方控件,比如:Infragistics的UltraWebMenu
      

  2.   

    1、这个你可以借用微软的控件treeview,然后不同用户你输出的不同的XML信息给你这个控件进行绑定;
    2、如果有直接的已经写好的div之类的静态代码,你可以直接使用前台绑定,后台输出这些html组合的数据到前台,至于数据怎么生成,根据你用户的不同权限 或者 不同分类的用户 输出不同的代码到前台页面进行绑定就行了3、如果是每个页面都不一样,那么建议你写一个输出菜单类,然后根据不同的权限或者页面来进行输出,也是后台输出数据到前台绑定希望好运。
      

  3.   

    自带的Treeview也挺好用的
      

  4.   

    把用户权限存进数据库
    读权限的时候根据此来 加载不同的菜单
    可以直接输出菜单并拼接html组合
    或者借助第三方控件
      

  5.   

    用自带的TreeView导航,在后台判断用户身份,不同身份拼不同的节点
      

  6.   

    使用dtree 根据不同的权限绑定不同的页面
      

  7.   

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs"
        Inherits="MyControl_WebUserControl" %>
    <asp:TreeView ID="TreeView1" runat="server" Height="163px" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged"
        Width="118px">
    </asp:TreeView>using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Collections.Generic;
    public partial class MyControl_WebUserControl : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BranchInfo();
            }
        }    /// <summary>
        /// 根据ID查询机信息中的名称添加到树形父节点
        /// </summary>
        private void BranchInfo()
        {        IList<BranchInfo> branchInfos = DHOffice.BLL.BrInfoManager.GetList();        foreach (BranchInfo branch in branchInfos)
            {
                TreeNode tnBranch = new TreeNode(branch.BranchName, branch.BranchId.ToString(), "", "", "main");
                tnBranch.Target = "a";
                tnBranch.ImageUrl = "/WebUI/Images/menuclose.gif";
                this.TreeView1.Nodes.Add(tnBranch);
                DepartInfo(tnBranch.ChildNodes, branch.BranchId);
            }
        }    /// <summary>
        /// 根据ID查询出信息中的名称添加到树形根节点
        /// </summary>
        /// <param name="tn"></param>
        /// <param name="branchId"></param>
        private void DepartInfo(TreeNodeCollection tn, int branchId)
        {        IList<DepartInfo> departInfos = DepartInfoManager.GetList(branchId);
            foreach (DepartInfo depart in departInfos)
            {
                TreeNode tnDepart = new TreeNode(depart.DepartName, depart.DepartId.ToString(), "", "", "main");
                tnDepart.Target = "b";
                tnDepart.ImageUrl = "/WebUI/Images/OpenTree.gif";
                tn.Add(tnDepart);
                DisplayUser(tnDepart.ChildNodes, depart.DepartId);
            }    }    /// <summary>
        /// 根据ID查询信息中的姓名添加到树形子节点
        /// </summary>
        /// <param name="tn"></param>
        /// <param name="departId"></param>
        private void DisplayUser(TreeNodeCollection tn, int departId)
        {        IList<UserInfo> users = DHOffice.BLL.UserInfoManager.GetList(departId);
            foreach (UserInfo user in users)
            {
                TreeNode tnUser = new TreeNode(user.UserName, user.UserId.ToString(), "", "", "main");
                tnUser.Target = "c";
                tnUser.ImageUrl = "/WebUI/Images/person.gif";
                tn.Add(tnUser);
            }
        }    /// <summary>
        /// 获取节点值的事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {
            //获取到节点的值
            TreeNode node = TreeView1.SelectedNode;
            //判断
            if (node.Target != "c")
            {
                Response.Write("<script>alert('你选择不是,请重新选择');</script>");
            }
            else
            {            //if选择的是“你选择不是,请重新选择”,else将选择人员添加            ListItem item = new ListItem();
                item.Text = node.Text;
                item.Value = node.Value;
                ListBox listBox = this.Parent.FindControl("lstPreContractUsers") as ListBox;
                listBox.Items.Add(item);
            }    }}这个是动态的,仅供参考
      

  8.   

    我用的标单验证,定义三个权限组,每个权限组对应不同的菜单,就直接用的if else
    <% 
                                            if (Roles.IsUserInRole("Role1"))
                                            {
                                        %>
                                        <ul class="leftmenulist">
                                            <li>
                                                <asp:HyperLink ID="lnkCreateUser" Text="´´½¨Óû§" NavigateUrl="~/SystemPages/CreateUser.aspx"
                                                    Target="_self" runat="server" EnableViewState="false" /></li>
                                            <br />
                                            <br />
                                        </ul>
                                        <%
                                            }
                                            else if (Roles.IsUserInRole("Role2"))
                                            {
                                        %>
                                        <br />
                                        <ajaxToolkit:Accordion ID="AccordionProvinceManagement" runat="server" SelectedIndex="-1"
                                            HeaderCssClass="accordionHeader" HeaderSelectedCssClass="accordionHeaderSelected"
                                            ContentCssClass="accordionContent" FadeTransitions="true" FramesPerSecond="40"
                                            TransitionDuration="250" AutoSize="None" RequireOpenedPane="false" SuppressHeaderPostbacks="true">
                                            <Panes>
                                                <ajaxToolkit:AccordionPane ID="AccordionPane13" runat="server" ContentCssClass=""
                                                    HeaderCssClass="">
                                                    <Header>
                                                        <a href="" class="accordionLink">Óû§¹ÜÀí</a>
                                                    </Header>
                                                    <Content>
                                                        <asp:HyperLink ID="HyperLink15" Text="¸ü¸ÄÃÜÂë" NavigateUrl="~/AllUsers/ChangePassword.aspx"
                                                            Target="_self" runat="server" EnableViewState="false" /><br />
                                                    </Content>
                                                </ajaxToolkit:AccordionPane>
                                            </Panes>
                                        </ajaxToolkit:Accordion>
                                        <%
                                            }
                                            else if (Roles.IsUserInRole("Role3 "))
                                            {
                                        %>
                                        <br />
                                        <ajaxToolkit:Accordion ID="AccordionCityManage" runat="server" SelectedIndex="-1"
                                            HeaderCssClass="accordionHeader" HeaderSelectedCssClass="accordionHeaderSelected"
                                            ContentCssClass="accordionContent" FadeTransitions="true" FramesPerSecond="40"
                                            TransitionDuration="250" AutoSize="None" RequireOpenedPane="false" SuppressHeaderPostbacks="true">
                                            <Panes>
                                                <ajaxToolkit:AccordionPane ID="AccordionPane15" runat="server">
                                                    <Header>
                                                        <a href="" class="accordionLink">Óû§¹ÜÀí</a></Header>
                                                    <Content>
                                                        <asp:HyperLink ID="HyperLink12" Text="¸ü¸ÄÃÜÂë" NavigateUrl="~/AllUsers/ChangePassword.aspx"
                                                            Target="_self" runat="server" EnableViewState="false" /><br />
                                                    </Content>
                                                </ajaxToolkit:AccordionPane>
                                            </Panes>
                                        </ajaxToolkit:Accordion>
                                        <%
                                            }
                                        %>