2009-07-08 3 views
0

Je peut demander l'impossible, mais laissez-moi mettre mon problème:ASP.NET faire un panneau visible sur clic de lien hypertexte (tout en cuasing postback pour la navigation de page)

J'ai un menu dans un MasterPage qui utilise images et mouseover mouseout événements à des fins de conception. Sur l'une des options de menu, j'ai besoin d'afficher un ensemble d'options de sous-menus sur le clic de l'élément de menu parent. L'élément de menu lui-même doit également naviguer vers une URL spécifiée. À l'origine, j'essayais d'utiliser un panneau d'accordéon AJAX mais comme je n'avais qu'un seul panneau d'accordéon, il affichait toujours les éléments du sous-menu et ne s'effondrait pas.

J'ai aussi essayé de placer les options dans un div et de régler l'affichage via javascript. Cela a fonctionné, mais a été écrasé une fois que la publication de la page a eu lieu.

Voici la source:

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<%@ Register Src="LeadHeader.ascx" TagName="LeadHeader" TagPrefix="uc1" %> 
<%@ Register Src="~/LeadFooter.ascx" TagName="LeadFooter" TagPrefix="uc2" %> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
     <link href="StyleSheet.css" rel="stylesheet" type="text/css" /> 

    <script type="text/javascript"> 
var revert = new Array(); 
var inames = new Array('home', 'whoweare', 'whatwedo','ourapproach', 'ourvalues', 'contact'); 


// Preload 
if (document.images) { 
    var flipped = new Array(); 
    for(i=0; i< inames.length; i++) { 
    flipped[i] = new Image(); 
    flipped[i].src = "images/"+inames[i]+"2.jpg"; 

    } 
} 

function over(num) { 
    if(document.images) { 
    revert[num] = document.images[inames[num]].src; 
    document.images[inames[num]].src = flipped[num].src; 

    } 
} 

function out(num) { 
    if(document.images) document.images[inames[num]].src = revert[num]; 
} 


function ShowHide(elementId) 
{ 
    var element = document.getElementById(elementId); 
    if(element.style.display != "block") 
    { 
     element.style.display = "block"; 
    } 
    else 
    { 
     element.style.display = "none"; 
    } 
} 
function UpdateText(element) 
{ 
    if(element.innerHTML.indexOf("Show") != -1) 
    { 
     element.innerHTML = "Hide Details"; 
    } 
    else 
    { 
     element.innerHTML = "Show Details"; 
    } 
} 



    </script> 

</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server"> 
       <uc1:LeadHeader ID="LeadHeader" runat="server" /> 
      </asp:ContentPlaceHolder> 
      <div id="nav"> 
       <div class="menu-item"> 
        <a href="Default.aspx"> 
         <img src="Images/home.jpg" alt="home" id="home" onmouseover="over(0)" onmouseout="out(0)" 
          class="right" /></a> 
       </div> 
       <div class="menu-item"> 
        <a href="AboutUs.aspx"> 
         <img src="Images/whoweare.jpg" alt="who we are" id="whoweare" onmouseover="over(1)" 
          onmouseout="out(1)" class="right" /></a> 
       </div> 
      <%-- <asp:ScriptManager ID="ScriptManager1" runat="server"> 
       </asp:ScriptManager> 
       <cc1:Accordion ID="Accordion1" runat="server" AutoSize="None" FadeTransitions="true" 
        TransitionDuration="350" FramesPerSecond="40" RequireOpenedPane="false" > 
        <Panes> 
         <cc1:AccordionPane runat="server"> 
          <Header>--%> 
           <div class="menu-item"> 
            <a href="WhatWeDo.aspx"> 
             <img src="Images/whatwedo.jpg" alt="what we do" id="whatwedo" onmouseover="over(2)" 
              onmouseout="out(2)" class="right" onclick="ShowHide('divDetails');UpdateText(this);" /></a></div> 

          <%--/Header> 
          <Content>--%> 
         <div id="divDetails" style="display:none;"> 

          <a href="management.aspx" title="Management Development">Management Development</a><br /> 
           <a href="leadership.aspx" title="Leadership Development">Leadership Development</a><br /> 
           <a href="personal.aspx" title="Personal Development">Personal Development</a><br /> 
           <a href="realteams.aspx" title="Team Building/Facilitation">Team Building & Facilitation</a><br /> 
           <a href="coaching.aspx" title="Coaching">One to One Coaching</a> 
          </div> 

         <%-- </Content> 
         </cc1:AccordionPane> 
        </Panes> 
       </cc1:Accordion> 
       --%> 

      <div class="menu-item"> 
       <a href="OurApproach.aspx"> 
        <img src="images/ourapproach.jpg" alt="our approach" id="ourapproach" onmouseover="over(3)" 
         onmouseout="out(3)" /></a> 
      </div> 
      <div class="menu-item"> 
       <a href="OurValues.aspx"> 
        <img src="images/ourvalues.jpg" alt="our values" id="ourvalues" onmouseover="over(4)" 
         onmouseout="out(4)" /></a> 
      </div> 
      <div class="menu-item"> 
       <a href="ContactUs.aspx"> 
        <img src="images/ContactUs.jpg" alt="contact us" id="contactus" onmouseover="over(5)" 
         onmouseout="out(5)" /></a> 
      </div> 
     </div> 
     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
     </asp:ContentPlaceHolder> 
     <asp:ContentPlaceHolder ID="ContentPlaceHolder3" runat="server"> 
      <uc2:LeadFooter ID="LeadFooter" runat="server" /> 
     </asp:ContentPlaceHolder> 
     </div> 
    </form> 
</body> 
</html> 
+0

Trop de code, Helen! Montrez-nous le HTML et le JavaScript appropriés au lieu de simplement jeter le contenu d'un fichier sur nos tours :) – roosteronacid

Répondre

1

Si je lis bien vous avez besoin des boutons de nav pour vous diriger vers une autre page et d'ouvrir un sous-menu pour afficher d'autres options. La méthode la plus simple consiste à créer tout le sous-menu de la page maître et à le masquer dans votre feuille de style globale. Chaque page pourrait alors contenir une ligne de css pour montrer le panneau approprié sans JavaScript requis.

Un moyen plus efficace serait d'utiliser this.Master.Page.FindControl ("myPanelId") pour gérer l'élément nécessaire côté serveur.

Je ne peux pas visualiser exactement ce que vous faites, mais j'ai utilisé les menus accordéon jQuery pour faire quelque chose de similaire. Mon code côté serveur construit une liste non ordonnée imbriquée avec des liens et les images appropriées. Je laisse l'événement hover basculer le panneau accordéon afin que je puisse encore cliquer sur l'un des liens pour aller à la page correspondante. Si cela est plus proche de ce que vous voulez, je peux vous donner une idée générale du code/css nécessaire.

Espérons que ça aide.

+0

Merci apocalyse9, Finalement, j'ai placé mon sous-menu dans un panneau séparé comme suggéré, puis j'ai géré la visibilité dans le code derrière , pas idéal mais je ne pouvais pas trouver une alternative à ce moment-là. Je dois passer un indicateur de visibilité dans l'URL (? Expand = true) pour contrôler cela. Je vais enquêter sur JQuery car cela semble être une bien meilleure solution. La visibilité resterait-elle après la publication avec jquery? – Helen

Questions connexes