Javascript 设置显示客户端中的任何asp面板都不会在任何链接按钮上重新显示该面板单击

Javascript 设置显示客户端中的任何asp面板都不会在任何链接按钮上重新显示该面板单击,javascript,css,asp.net,vb.net,visibility,Javascript,Css,Asp.net,Vb.net,Visibility,我面临一个asp面板可见性的奇怪问题。我有一个小表单,它在面板中包含一个按钮,使div可见 <div id="myModal" class="modal" style="display: none"> <span onclick="CloseMyDiv();" id="closeSpan" class="close">×</span> <!-- Modal content --> </div> <asp:Panel

我面临一个asp面板可见性的奇怪问题。我有一个小表单,它在面板中包含一个按钮,使div可见

<div id="myModal" class="modal" style="display: none">
 <span onclick="CloseMyDiv();" id="closeSpan" class="close">×</span>
    <!-- Modal content --> 
</div>

<asp:Panel ID="pnlHasPriorApproval" runat="server" Style="display: none">
   <input onclick="ShowModal();" type="button" value="Extract" runat="server" />
</asp:Panel>
我确信服务器端没有任何东西会改变我的面板在这个函数中的可见性,无论是在加载页面事件中。无论如何,我用一个新ID“testDiv”在一个div中实现了我的面板,以确保它不会在其他任何地方使用,并且我用它执行了相同的过程(过程是隐藏这个div onclick),每当我单击lnkBtnphyCode时,它仍然会出现

尝试过的解决方案:

  • 我尝试过同样的过程,设置可见性:隐藏,而不是使用显示。。。但我也有同样的问题
  • 我在我的LNKBTNHYCODE_Click方法中添加了
    Dim v=Me.pnlHasPriorApproval.Visible
    ,v返回true,这很奇怪,因为我已经将其隐藏起来,正如您在开始时看到的那样

  • 使其始终隐藏且不在单击时显示的唯一方法是更改服务器端的可见性,我无法理解为什么它不总是对javascript(客户端)隐藏


  • 我的问题是:如何使它始终对Javascript隐藏?

    Javascript代码在客户端执行,ASP.Net在服务器端执行。除非JS代码与服务器共享当前状态信息,否则ASP.Net代码不会知道JS代码所做的更改

    当您单击按钮时,只有表单数据被提交到服务器。因此,div和panel现在隐藏的信息不会被传递(这是一种正常行为)。若您想将其传递给服务器,则需要使用一些隐藏的表单字段显式地发送此信息

    您可以做的是:

  • 在页面上创建一个隐藏控件,例如
    isPanelVisible
  • 隐藏div/面板时,使用JS代码在隐藏控件中设置一个
    true
  • 在服务器端代码中的
    Page\u Load
    上,检查此隐藏控件的值,并相应地设置面板的可见性

  • 这是处理此类案件的典型方式。

    这不是一个奇怪的问题。服务器不知道您更改了可见性,因此当页面(重新)加载时,它将显示面板。使用服务器端
    Visible
    ,将状态存储在
    asp:HiddenField
    中,并检查每次页面加载,或者使用
    UpdatePanel
    以及为什么另一个div仍然隐藏?
    function ShowModal() {
        $('#myModal').show();
     }
    
     function CloseMyDiv() {
                var modal = document.getElementById('myModal'); // this is my div
                var pnlHasPriorApproval = document.getElementById('<%=  pnlHasPriorApproval.ClientID %>');  // this is my pannel
    pnlHasPriorApproval.style.display = "none"; // hiding pannel
    modal.style.display = "none"; // hiding div
    }
    
    Protected Sub lnkBtnphyCode_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkBtnphyCode.Click
    ....
    End Sub