2011-10-10 12 views
4

私はメニュー項目の2つのレベルでメニューコントロールを持っています! NavigationUrlプロパティを使用すると、私のajax UpdateProgressが起動しないため、OnMenuItemClickイベントの背後にあるコードを介してナビゲートしたいと考えています!asp.netメニューのサブメニュー項目、コードの後ろにリダイレクト

問題は、どのサブメニューアイテムをクリックしても、イベントが発生したときに最初のアイテムが毎回かかりますか?

<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; 
      } 

したがって、HoursOfBusinessの下の「作成」をクリックすると、概要メニューアイテムがイベントに送信されます。 私は説明が理解できることを願っていますか?

<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> 

とコードが背後にある。このようなものです::

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; 

    } 
} 

がうまくいけば、これはあなたの問題を解決するのに役立ちます:-)

答えて

6

これは、私は、この問題を解決する方法です。

+0

助けてくれてありがとう!それは今作動する!!私はなぜ理解していないのですか?主な違いは、値のプロパティをチェックするが、それらを設定しないことです? btw:最初のレベルのメニュースイッチケースに感謝します:-) – Schmurgel

+0

メニューアイテムの値を自動的に設定しないと、アイテムの名前が値として使用されます。あなたが持っていた問題は、あなたのmenuitemのTextプロパティをコードでチェックすることができないことです。私はその理由を知らないが、価値をチェックすることは機能するだろう。したがって、コードを実行すると、メニュー項目自体の実際のテキストではなく、「ワークフロー」または「HoursOfBusiness」しか取得できません。だから私は値をテキストの実際の値にして(それを空にしておくことによって)これを解決し、パラレントをチェックします。うまくいけば、この答えはあなたに私のソリューションを少し明確にします。 –

関連する問題