簡體   English   中英

ASP.NET用戶控件:檢查用戶控件是否可見

[英]ASP.NET usercontrol: check if usercontrol is visible

我的問題與此線程有關: 如何避免在aspx中初始化Web用戶控件?

僅當單擊按鈕時,UserControl才可見。 所以我的用戶控件設置如下:

<example:usercontrol ID="idControl" runat="server" Visible="false" />
<asp:Button ID="showMyControl" runat="server" OnClick="ShowMyControl" /

用戶控件本身會檢查他是否可見:

protected void Page_Load( object sender, EventArgs e ) {
    // only execute if the user control is visible
    if ( this.Visible ) {
        ...
    }
}

當我單擊按鈕時,我將usercontrol的Visible屬性設置為true,但是發生回發時,usercontrol的Page_Load中的Visible-property仍然設置為false。

我的UserControl可能會先加載,然后再設置Visible-property? 有解決此問題的簡便方法嗎?

提前致謝!

如果我理解正確,則由Page_Load事件處理程序方法處理的控件的Load事件在按鈕控件的Click事件之前觸發。 因此,當Page_Load方法檢查this.Visible ,該屬性尚未更改,因為尚未執行Click事件處理程序。

因此,我認為在PreRender事件而不是Load事件中檢查控件的Visible屬性更為合適。

我猜測您正在執行某種數據檢索,或者如果控件不可見,則希望避免這種情況。 不幸的是,這種與頁面生命周期和事件觸發順序有關的問題是ASP.Net編程中要解決的常見問題。

如果所有初始化代碼都可以輕松移入PreRender事件,那就好了。 問題已解決(希望如此)。 如果不是這樣(即您需要在PreRender之前進行一些操作),則可能需要提出一些其他機制來確保您的代碼在正確的時間執行。 例如,您可以在控件上公開“ SetVisible”方法,該方法將Visible屬性設置為true,然后執行所需的初始化邏輯。 這樣做的缺點是您不能真正保證某些代碼不會僅僅在您提供的SetVisible方法之外將控件的Visible屬性設置為true。

另一個想法是實際上重寫Visible屬性,並在該屬性設置為true時執行初始化邏輯。

將您在控件的Page_Load事件中調用的代碼放入PostBack事件中。 確保按鈕的autopostback設置為true。

您正在尋找的是Control.EnsureChildControls方法。 在這種情況下存在此方法。 這將確保已創建所有子控件。 然后,您可以設置可見屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM