在客户端设置 asp 面板的显示 none 会在任何 linkButtonclick 上重新显示它
Setting display none of an asp panel in client side is re-showing it on any linkButtonclick
我遇到了 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>
以下是 javascript 函数:
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
}
过程是:每当我单击此按钮时,都会显示 div,而每当我单击关闭时,div 和面板都应该被隐藏...这非常有效。但是:每当我单击它时,我都会有另一个按钮,面板会再次显示,而它应该保持隐藏状态。
此按钮由服务器端的函数处理:
Protected Sub lnkBtnphyCode_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkBtnphyCode.Click
....
End Sub
我确信服务器端没有任何东西改变我的面板在这个函数中的可见性,在加载页面事件中也没有。无论如何,我已经在一个 div 中使用新 ID "testDiv" 实现了我的面板,以确保它不会在其他任何地方使用,并且我已经完成了相同的过程(过程是隐藏这个 div onclick) 并且每当我点击 lnkBtnphyCode 时它仍然出现。
尝试过的解决方案:
- 我通过设置 visibility:hidden 而不是使用显示来尝试相同的过程...但我遇到了同样的问题
我在我的 lnkBtnphyCode_Click 方法中添加了 Dim v = Me.pnlHasPriorApproval.Visible
,v 返回 true 这很奇怪,因为我已经将它隐藏起来,正如您在开头看到的那样。
让它始终隐藏并且不在单击时显示的唯一方法是更改服务器端的可见性,我不明白为什么它并不总是对 javascript 隐藏(客户).
我的问题是:如何让它始终对 Javascript 隐藏?
JavaScript代码在客户端执行,ASP.Net在服务器端执行。除非 JS 代码与服务器共享当前状态信息,否则您的 ASP.Net 代码将不知道 JS 代码所做的更改。
当您点击按钮时,只有表单数据被提交到服务器。因此 div 和面板现在被隐藏的信息不会被传递(这是正常行为)。如果您想将它传递到服务器,您需要使用一些隐藏的表单字段显式发送此信息。
您可以做的是:
- 在页面上创建一个隐藏控件,比如说
isPanelVisible
。
- 隐藏div/面板时,使用JS代码在隐藏控件中设置一个
true
。
- 在服务器端代码中
Page_Load
,检查此隐藏控件的值并相应地设置面板的可见性。
这是处理此类案件的典型方式。
我遇到了 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>
以下是 javascript 函数:
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
}
过程是:每当我单击此按钮时,都会显示 div,而每当我单击关闭时,div 和面板都应该被隐藏...这非常有效。但是:每当我单击它时,我都会有另一个按钮,面板会再次显示,而它应该保持隐藏状态。
此按钮由服务器端的函数处理:
Protected Sub lnkBtnphyCode_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkBtnphyCode.Click
....
End Sub
我确信服务器端没有任何东西改变我的面板在这个函数中的可见性,在加载页面事件中也没有。无论如何,我已经在一个 div 中使用新 ID "testDiv" 实现了我的面板,以确保它不会在其他任何地方使用,并且我已经完成了相同的过程(过程是隐藏这个 div onclick) 并且每当我点击 lnkBtnphyCode 时它仍然出现。
尝试过的解决方案:
- 我通过设置 visibility:hidden 而不是使用显示来尝试相同的过程...但我遇到了同样的问题
我在我的 lnkBtnphyCode_Click 方法中添加了
Dim v = Me.pnlHasPriorApproval.Visible
,v 返回 true 这很奇怪,因为我已经将它隐藏起来,正如您在开头看到的那样。让它始终隐藏并且不在单击时显示的唯一方法是更改服务器端的可见性,我不明白为什么它并不总是对 javascript 隐藏(客户).
我的问题是:如何让它始终对 Javascript 隐藏?
JavaScript代码在客户端执行,ASP.Net在服务器端执行。除非 JS 代码与服务器共享当前状态信息,否则您的 ASP.Net 代码将不知道 JS 代码所做的更改。
当您点击按钮时,只有表单数据被提交到服务器。因此 div 和面板现在被隐藏的信息不会被传递(这是正常行为)。如果您想将它传递到服务器,您需要使用一些隐藏的表单字段显式发送此信息。
您可以做的是:
- 在页面上创建一个隐藏控件,比如说
isPanelVisible
。 - 隐藏div/面板时,使用JS代码在隐藏控件中设置一个
true
。 - 在服务器端代码中
Page_Load
,检查此隐藏控件的值并相应地设置面板的可见性。
这是处理此类案件的典型方式。