Panel.Enabled在UpdatePanel内部工作。 Panel.Visible不会

时间:2009-09-15 20:55:17

标签: .net asp.net

我在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部分,但它真的很长,所以我只会发布它,如果它是绝对需要的。

2 个答案:

答案 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的可见性工作正常。