繁体   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