Asp 面板可见为真但面板未显示

时间:2021-05-12 17:07:05

标签: asp.net webforms

我有一个内容页面,其中更新面板内有 3 个面板

CALL

在页面加载第二个面板 <asp:UpdatePanel ID="updateOfEmployee" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:panel ID="verificationOfEmployee" BorderStyle="Solid" BorderWidth="1px" runat="server"> --some additional controls like textbox, dropdown list and validation control, visibility of all these controls set to true. </asp:panel> </ContentTemplate> </asp:UpdatePanel> <asp:UpdatePanel ID="emp_Address_Update" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:Panel ID="emp_Addresss_Panel" BorderStyle="Solid" BorderWidth="1px" runat="server"> --some additional controls like textbox, dropdown list and validation control, visibility of all these controls set to true. </asp:Panel> </ContentTemplate> </asp:UpdatePanel> <asp:Panel ID="emp_Other_Details" BorderWidth="1px" BorderStyle="Solid" runat="server"> --some additional controls like textbox, dropdown list and validation control, visibility of all these controls set to true. </asp:Panel>code ;第三个面板 emp_Addresss_Panel.Visible = false = false;在按钮一的点击事件中,我试图将第二个和第三个面板的可见性设置为 true,将第一个面板的可见性设置为 false,但第二个和第三个面板在浏览器中不可见,我在第二个面板的 if 语句中检查了 visible 属性并发现第二个面板可见已经设置为 true 但它没有出现在浏览器中。这是我在第一个面板的点击事件中的代码的一部分。

emp_Other_Details.Visible

1 个答案:

答案 0 :(得分:1)

默认情况下,UpdatePanel 的 AJAX 回发不会导致其外部的任何内容更新,包括另一个 UpdatePanel 中的控件。您有两种解决方案。

1.将每个 Panel 移到同一个 UpdatePanel

<asp:UpdatePanel ID="updateOfEmployee" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Panel ID="verificationOfEmployee" BorderStyle="Solid" BorderWidth="1px" runat="server">
            --some additional controls like textbox, dropdown list and validation control, visibility of all these controls set to true.
        </asp:Panel>            
        <asp:Panel ID="emp_Addresss_Panel" BorderStyle="Solid" BorderWidth="1px" runat="server" Visible="false">
            --some additional controls like textbox, dropdown list and validation control, visibility of all these controls set to true.
        </asp:Panel>
        <asp:Panel ID="emp_Other_Details" BorderWidth="1px" BorderStyle="Solid" runat="server" Visible="false">
            --some additional controls like textbox, dropdown list and validation control, visibility of all these controls set to true.
        </asp:Panel>
    </ContentTemplate>
</asp:UpdatePanel>
verificationOfEmployee.Visible = false;
emp_Addresss_Panel.Visible = true;
emp_Other_Details.Visible = true;

2.添加交叉UpdatePanel触发器

注意:通过向第二个 AsyncPostBackTrigger 添加 UpdatePanel,它可以在第一个 UpdatePanel 的事件中刷新。请注意,您的第三个 Panel 不会更新,因为它既不在 UpdatePanel 中,也不在它自己的一个中。

演练: Cross-UpdatePanel Triggers

<asp:UpdatePanel ID="updateOfEmployee" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Panel ID="verificationOfEmployee" BorderStyle="Solid" BorderWidth="1px" runat="server">
            --some additional controls like textbox, dropdown list and validation control, visibility of all these controls set to true.
        </asp:Panel>
        <asp:Button ID="updateButton" runat="server" Text="Update" OnClick="updateButton_Click" />        
    </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="emp_Address_Update" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Panel ID="emp_Addresss_Panel" BorderStyle="Solid" BorderWidth="1px" runat="server" Visible="false">
            --some additional controls like textbox, dropdown list and validation control, visibility of all these controls set to true.
        </asp:Panel>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="updateButton" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Panel ID="emp_Other_Details" BorderWidth="1px" BorderStyle="Solid" runat="server" Visible="false">
    --some additional controls like textbox, dropdown list and validation control, visibility of all these controls set to true.
</asp:Panel>
protected void updateButton_Click(object sender, EventArgs e)
{
    verificationOfEmployee.Visible = false;  // will render
    emp_Addresss_Panel.Visible = true;       // will render
    emp_Other_Details.Visible = true;        // will NOT render
}