我在UpdatePanel中有一个Panel控件。当我设置Panel.Enabled = false;在回发时,Panel中的所有控件都将被禁用。但是,当我调用Panel.Visible = false时;在回发时,小组仍然显示。
此代码按预期执行:
protected void rdoPayment_CheckedChanged(object sender, EventArgs e)
{
pnlBillingAddress.Enabled = rdoCreditCard.Checked;
upBillingAddress.Update();
}
如果我将代码更改为此,则当面板设置为false时,面板仍然可见:
protected void rdoPayment_CheckedChanged(object sender, EventArgs e)
{
pnlBillingAddress.Visible = rdoCreditCard.Checked;
upBillingAddress.Update();
}
此外,如果我像这样更改代码,当Enabled设置为false时,控件不再被禁用,面板仍然可见:
protected void rdoPayment_CheckedChanged(object sender, EventArgs e)
{
pnlBillingAddress.Enabled = rdoCreditCard.Checked;
pnlBillingAddress.Visible = rdoCreditCard.Checked;
upBillingAddress.Update();
}
任何人都知道这里发生了什么?
PS。我可以发布代码的aspx部分,但它真的很长,所以我只会发布它,如果它是绝对需要的。
答案 0 :(得分:4)
仔细检查aspx后,我意识到Panel实际上是包装UpdatePanel而不是反之亦然。我将Panel放在ContentTemplate中,一切都很好。
答案 1 :(得分:2)
Panel的Visible属性返回true,因为其父控件的可见性也设置为true。这没有详细记录,但这是一篇相关的博文:ASP.Net: Remember, the .Visible property also checks parent’s visibility!
也许您需要重构代码并为该Panel使用单独的UpdatePanel并设置UpdatePanel的可见性。我建议设置断点并在测试后使用控件及其父级的不同值检查可见性。
虽然以上链接对于PlaceHolder控件和其他链接似乎是准确的,但如果它应用于所有内容则似乎很奇怪,因为这应该是常见的场景。我开始测试这个并在UpdatePanel中设置Panel的可见性工作正常。