0

我有一个 asp.net web 应用程序,我在母版页下有一个 aspx 页面。我有两个 UserControl:(1) UC1 (2) UC2。UC1添加在母版页设计中,UC2添加在aspx页面设计中。

现在我在 UC1 上有一些复选框,将 AutoPostback 属性设置为 True。在 Checked_Change 事件中,我在 Session 中添加了一些值。然后我想调用 UC2 userControl 内部的函数

但问题是当复选框checkedchanges UC2'代码首先执行然后UC1的代码执行..所以在UC2的代码中没有找到UC1的代码中添加的任何会话值

那么如何更改 UserControls 的代码执行顺序???

有没有办法通过 UC1 找到 MasterPage 的子页面???

谢谢

4

1 回答 1

0

是的,这不是控件之间通信的好方法,使用会话也不是一个好习惯。但是,您可以做的是这样的:

在母版页上,使用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);
}
于 2013-02-22T10:35:44.353 回答