簡體   English   中英

與ASP.net中的UserControl相關的問題

[英]Issue Related to UserControl in ASP.net

我有一個asp.net Web應用程序,我在母版頁下有一個aspx頁。我有兩個UserControl:(1)UC1(2)UC2。 在母版頁設計中添加了UC1,在aspx頁設計中添加了UC2。

現在我在UC1上有一些復選框,其AutoPostback屬性設置為True。在Checked_Change事件中,我在會話中添加了一些值。 然后我想調用UC2 userControl內部的函數

但是問題是,當復選框checkedchanges選中時,先執行UC2的代碼,然后再執行UC1的代碼..因此,在UC2的代碼中找不到在UC1的代碼中添加的任何會話值

那么如何更改UserControls的代碼執行順序?

有什么辦法可以通過UC1查找MasterPage的子頁面?

謝謝

是的,這不是控件之間進行通信的好方法,使用會話也不是一種很好的做法。 但是,您可以做的是這樣的:

在母版頁上,使用ContentPlaceHolder嘗試查找UC2 ,您需要其ID才能使用FindControl方法:

Control ctrl = ContentPlaceHolder.FindControl("UC2_ID");

if (ctrl != null && ctrl is UC2)
{
    UC2 uc2 = (UC2)ctrl;

    uc2.TakeThisStuff(stuff);
}

或者,如果您真的不知道其ID,則可以遍歷ContentPlaceHolder控件,直到找到類型為UC2的控件為止。

public T FindControl<T>(Control parent) where T : Control
{
    foreach (Control c in parent.Controls)
    {
        if (c is T)
        {
            return (T)c;
        }
        else if (c.Controls.Count > 0)
        {
            Control child = FindControl<T>(c);
            if (child != null)
                return (T)child;
        }
    }

    return null;
}

像這樣使用它:

UC2 ctrl = FindControl<UC2>(ContentPlaceHolder);

if (ctrl != null)
{
    UC2 uc2 = (UC2)ctrl;

    uc2.TakeThisStuff(stuff);
}

暫無
暫無

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

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