我在页面上有一个包含嵌套面板的更新面板。它有一个小型的面板(如登录形式)和一个按钮。单击该按钮时,将检查一些条件,如果通过,则隐藏第一个Panel,并显示具有更大表单的第二个Panel。
因为较大的表单可能需要一些时间来加载(它从其他源提取数据),小表单面板包含一个UpdateProgress控件。
所有这一切都很好。
然后我在登录表单Panel中添加了一个嵌套的Panel,放在UpdateProgress下面,它将显示一条有意义的错误消息,例如登录代码是否不正确。这显示为预期。但是,如果用户随后更正了他们的信息并再次单击该按钮,则UpdateProgress会正确显示,但错误消息仍然可见,即使我尝试在代码隐藏中将其设置为Visible = false。
此页面不使用母版页。
调试显示Visible属性确实设置为false,尽管它仍显示在浏览器中。
ASPX代码:
user
Code Behind(我已尝试在Page_Load,pnlUpdate_Load事件和btnBegin_Click事件中将可见设置为false - 但该错误消息不会消失。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="custom_Default" %>
<!DOCTYPE html>
<html lang="en">
<head runat="server">
<!-- meta and link tags -->
</head>
<body>
<form id="form1" runat="server">
<div class="container">
<!-- h1 and all that -->
<asp:ScriptManager ID="scriptManager" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="pnlUpdate" runat="server">
<ContentTemplate>
<asp:Panel ID="pnlLogin" runat="server">
<!-- label and text field -->
<asp:Button ID="btnBegin" runat="server" OnClick="btnBegin_Click" />
<asp:UpdateProgress ID="updProgress" runat="server" AssociatedUpdatePanelID="pnlUpdate">
<ProgressTemplate>
<p>Loading, please wait... </p>
</ProgressTemplate>
</asp:UpdateProgress>
<asp:Panel ID="pnlMessage" runat="server" Visible="false">
<asp:Literal ID="ltlMessage" runat="server" />
</asp:Panel>
</asp:Panel>
<asp:Panel ID="pnlMainForm" runat="server" Visible="false">
</asp:Panel>
<asp:Panel ID="pnlConfirmation" runat="server" Visible="false">
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
<!-- javascript - jquery and bootstrap -->
</body>
</html>
我试过删除Visible =&#34; false&#34;来自ASPX页面上的pnlMessage并将其放在Page_Load后面的代码中,但在消息显示后我仍然无法隐藏它。
如何在第二次点击btnBegin后隐藏pnlMessage面板?
答案 0 :(得分:0)
我设法找到了解决方案。显然,在.NET中没有办法实现它 - 它必须在JavaScript中完成。
以下是我用来完成此操作的代码。
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(initializeRequest);
prm.add_endRequest(endRequest);
var _postBackElement;
function initializeRequest(sender, e) {
if (prm.get_isInAsyncPostBack()) {
e.set_cancel(true);
}
$get('pnlMessage').style.display = 'none';
}
function endRequest(sender, e) {
$get('pnlMessage').style.display = 'block';
}
</script>