如何在使用UpdateProgress控件的UpdatePanel中设置控件的可见性?

时间:2015-11-20 18:36:41

标签: c# asp.net

我在页面上有一个包含嵌套面板的更新面板。它有一个小型的面板(如登录形式)和一个按钮。单击该按钮时,将检查一些条件,如果通过,则隐藏第一个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面板?

1 个答案:

答案 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>