【问题标题】:ASP.NET make a panel visible on click of hyperlink (whilst also cuasing postback for page navigation)ASP.NET 在单击超链接时使面板可见(同时还导致页面导航回发)
【发布时间】:2009-07-08 08:57:00
【问题描述】:

我可能会问不可能的问题,但让我提出我的问题:

我在 MasterPage 中有一个菜单,它使用图像和 mouseover mouseout 事件进行设计。 在其中一个菜单选项上,我需要在单击父菜单项时显示一组子菜单选项。菜单项本身也需要导航到指定的 url。

我最初尝试使用 AJAX 手风琴面板,但由于我只有一个手风琴面板,它总是显示子菜单项并且没有折叠。

我还尝试将选项放在 div 中并通过 javascript 设置显示。这可行,但一旦发生页面导航回发,就会被覆盖。

这里是来源:

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

【问题讨论】:

  • 代码太多,海伦!向我们展示相关的 HTML 和 JavaScript,而不是仅仅将文件的内容转储到我们的圈子里 :)

标签: asp.net javascript master-pages


【解决方案1】:

如果我没看错,您需要导航按钮将您引导至另一个页面并打开子菜单以显示更多选项。

最简单的方法是在母版页上创建整个子菜单并将其隐藏在全局样式表中。然后,每个页面都可以包含一行 css 来显示不需要 JavaScript 的适当面板。

更有效的方法是使用 this.Master.Page.FindControl("myPanelId") 在服务器端处理必要的项目。

我无法准确地想象你在做什么,但我已经使用 jQuery 手风琴菜单来做类似的事情。我的服务器端代码构建了一个带有链接和适当图像的嵌套无序列表。我让悬停事件切换手风琴面板,以便我仍然可以单击任何链接以转到相应的页面。如果这更接近您想要的,我可以让您大致了解所需的代码/css。

希望对您有所帮助。

【讨论】:

  • 感谢 apocalyse9,最后我按照建议将子菜单放在单独的面板中,然后在后面的代码中处理可见性,虽然不理想,但当时我想不出替代方案。我必须在 url (?expand=true) 中传递一个可见性标志来控制它。我将研究 JQuery,因为这听起来像是一个更好的解决方案。使用 jquery 回发后,可见性会保持不变吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
相关资源
最近更新 更多