更好的方法...
您应该做的是在您的用户控件中创建一个自定义事件,您的容器将订阅该事件 - 非常类似于订阅按钮事件,只是这是您的自定义控件。此事件将信息传递给您的容器,然后容器可以从中辨别出它需要什么,例如 div 是否应该/不可见。
它可能看起来像:
protected void Page_Load(object sender, EventArgs e)
{
this.myuserControl.Update += new MyUserControlUpdateEventHandler(myuserControl_Update);
}
void myuserControl_Update(object sender, MyuserControlEventArgs e)
{
this.parentDiv.visible = !e.ShouldHideUI;
}
此方法将您的父级与用户控件解耦,即您的用户控件不必了解所有父级控件,也不应该了解。
如果你好奇,这里有一个粗略的例子来说明你的用户控件将如何定义这样一个事件:
public class MyuserControlEventArgs : EventArgs
{
public bool ShouldHideUI { get;set;}
public MyuserControlEventArgs (bool shouldHideUI)
{
this.ShouldHideUI = shouldHideUI;
}
}
public delegate void MyUserControlUpdateEventHandler(object sender, MyuserControlEventArgs e);
public event MyUserControlUpdateEventHandler Update;
protected void OnUpdate(MyuserControlEventArgs e)
{
if (Update!= null)
Update(this, e);
}
您的用户控件只需要在其订阅者需要了解它时调用 OnUpdate。
快速而肮脏的方式......
如果您需要快速和肮脏,那么试试这个(在您的用户控件内):
TheParentControl parentControl = (TheParentControl)this.Parent;
parentControl.ParentDiv.Visible = true;
关键是转换为适当的类型(显然你的用户控件会知道它有什么类型的父级),然后设置父级的属性。您可能会将您的 div 公开为父控件中的属性。请注意,该父级可以是您的用户控件所在的控件集合中的任何控件(页面、FooControl、BarControl 等)。一旦您获得了父级的句柄,您甚至FindControl()
可以按名称查找控件。