带有子菜单项的asp.net菜单,通过代码隐藏重定向

带有子菜单项的asp.net菜单,通过代码隐藏重定向,asp.net,menuitem,Asp.net,Menuitem,我有一个菜单控制与2级菜单项! 我想通过OnMenuItemClick事件背后的代码导航,因为当我使用NavigationUrl属性时,我的ajax UpdateProgress不会启动 问题是,无论我单击哪个子菜单项,当事件引发时,它都会在每次单击第一项时获取 <asp:Menu ID="Menu1" runat="server" onmenuitemclick="Menu1_MenuItemClick" > ... <Items> <asp:Me

我有一个菜单控制与2级菜单项! 我想通过OnMenuItemClick事件背后的代码导航,因为当我使用NavigationUrl属性时,我的ajax UpdateProgress不会启动

问题是,无论我单击哪个子菜单项,当事件引发时,它都会在每次单击第一项时获取

<asp:Menu ID="Menu1" runat="server" onmenuitemclick="Menu1_MenuItemClick" >
...
    <Items>
    <asp:MenuItem Text="WorkFlows">
    <asp:MenuItem Text="Overview" Value="Workflow"></asp:MenuItem>
    <asp:MenuItem Text="Edit" Value="Workflow"></asp:MenuItem>
    <asp:MenuItem Text="Create" Value="Workflow"></asp:MenuItem>
    <asp:MenuItem Text="Delete" Value="Workflow"></asp:MenuItem>
    </asp:MenuItem>

    <asp:MenuItem Text="HoursOfBusiness">
    <asp:MenuItem Text="Overview" Value="HoursOfBusiness"></asp:MenuItem>
    <asp:MenuItem Text="Edit" Value="HoursOfBusiness"></asp:MenuItem>
    <asp:MenuItem Text="Create" Value="HoursOfBusiness"></asp:MenuItem>
    <asp:MenuItem Text="Delete" Value="HoursOfBusiness"></asp:MenuItem>
    </asp:MenuItem>


    </Items>
    </asp:Menu>

protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
        {

            switch (e.Item.Value)
            {
                case "Workflow":
                    switch (e.Item.Text)
                    {
                        case "Overview":
                            Response.Redirect("~/RGS/Workflow/Workflow.aspx");
                            break;
                            case "Edit":
                            Response.Redirect("~/RGS/Workflow/WorkflowEdit.aspx");
                            break;
                            case "Create":
                            Response.Redirect("~/RGS/Workflow/WorkflowCreate.aspx");
                            break;
                            case "Delete":
                            Response.Redirect("~/RGS/Workflow/WorkflowDelete.aspx");
                            break;
                    }
                    break;
                case "HoursOfBusiness":
                    switch (e.Item.Text)
                    {
                        case "Overview":
                            Response.Redirect("~/RGS/Workflow/BusinessHour/BusinessHours.aspx");
                            break;
                        case "Edit":
                            Response.Redirect("~/RGS/Workflow/BusinessHour/BusinessHours.aspx");
                            break;
                        case "Create":
                            Response.Redirect("~/RGS/Workflow/BusinessHour/BusinessHoursCreate.aspx");
                            break;
                        case "Delete":
                            Response.Redirect("~/RGS/Workflow/BusinessHour/BusinessHours.aspx");
                            break;
                    }
                    break;
            }

...
受保护的无效菜单1\u菜单单击(对象发送者,菜单目标e)
{
开关(如项目值)
{
案例“工作流”:
开关(如Item.Text)
{
案例“概述”:
重定向(“~/RGS/Workflow/Workflow.aspx”);
打破
案例“编辑”:
Response.Redirect(“~/RGS/Workflow/WorkflowEdit.aspx”);
打破
案例“创建”:
重定向(“~/RGS/Workflow/WorkflowCreate.aspx”);
打破
案例“删除”:
重定向(“~/RGS/Workflow/WorkflowDelete.aspx”);
打破
}
打破
案例“营业时间”:
开关(如Item.Text)
{
案例“概述”:
Response.Redirect(“~/RGS/Workflow/BusinessHour/BusinessHours.aspx”);
打破
案例“编辑”:
Response.Redirect(“~/RGS/Workflow/BusinessHour/BusinessHours.aspx”);
打破
案例“创建”:
Response.Redirect(“~/RGS/Workflow/BusinessHour/BusinessHoursCreate.aspx”);
打破
案例“删除”:
Response.Redirect(“~/RGS/Workflow/BusinessHour/BusinessHours.aspx”);
打破
}
打破
}
所以,当我在HoursOfBusiness下单击Create时,我会看到Overview菜单Item send to the event?!
我希望解释是可以理解的?!:-)

我就是这样解决这个问题的:

<asp:Menu ID="Menu1" runat="server" OnMenuItemClick="Menu1_MenuItemClick">
    <Items>
        <asp:MenuItem Text="WorkFlows">
            <asp:MenuItem Text="Overview" />
            <asp:MenuItem Text="Edit" />
            <asp:MenuItem Text="Create" />
            <asp:MenuItem Text="Delete" />
        </asp:MenuItem>
        <asp:MenuItem Text="HoursOfBusiness">
            <asp:MenuItem Text="Overview" />
            <asp:MenuItem Text="Edit" />
            <asp:MenuItem Text="Create" />
            <asp:MenuItem Text="Delete" />
        </asp:MenuItem>
    </Items>
</asp:Menu>

希望这能帮助您解决问题。

谢谢您的帮助!现在可以了!!但我不明白为什么?主要区别在于您检查了value属性,但没有设置它们?顺便说一句:感谢第一级菜单开关案例:-)如果您没有自动设置菜单项的值,则该项的名称将用作v值。您遇到的问题是无法在代码隐藏中检查menuitem的文本属性。我不知道原因,但检查值会起作用。因此,当您运行代码时,只能获得“工作流”或“业务小时数”而不是菜单项本身的实际文本。因此,我通过将值设为文本的实际值(保留为空)并检查参数来解决这个问题。希望这个答案能让我的解决方案对您更清楚一点。
protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
{
    bool hasParent = (e.Item.Parent != null);

    switch (hasParent)
    {
        case false:
            switch (e.Item.Value)
            {
                case "WorkFlows":
                    Response.Redirect("~/RGS/Workflow/Workflow.aspx");
                    break;
                case "HoursOfBusiness":
                    Response.Redirect("~/RGS/Workflow/BusinessHour/BusinessHours.aspx");
                    break;
            }
            break;
        case true:
            switch (e.Item.Parent.Value)
            {
                case "WorkFlows":
                    switch (e.Item.Value)
                    {
                        case "Overview":
                            Response.Redirect("~/RGS/Workflow/Workflow.aspx");
                            break;
                        case "Edit":
                            Response.Redirect("~/RGS/Workflow/WorkflowEdit.aspx");
                            break;
                        case "Create":
                            Response.Redirect("~/RGS/Workflow/WorkflowCreate.aspx");
                            break;
                        case "Delete":
                            Response.Redirect("~/RGS/Workflow/WorkflowDelete.aspx");
                            break;
                    }
                    break;
                case "HoursOfBusiness":
                    switch (e.Item.Value)
                    {
                        case "Overview":
                            Response.Redirect("~/RGS/Workflow/BusinessHour/BusinessHours.aspx");
                            break;
                        case "Edit":
                            Response.Redirect("~/RGS/Workflow/BusinessHour/BusinessHours.aspx");
                            break;
                        case "Create":
                            Response.Redirect("~/RGS/Workflow/BusinessHour/BusinessHoursCreate.aspx");
                            break;
                        case "Delete":
                            Response.Redirect("~/RGS/Workflow/BusinessHour/BusinessHours.aspx");
                            break;
                    }
                    break;
            }
            break;

    }
}