我有一个正在重复使用的Page.aspx。有点像母版页(我实际上使用的是Sitecore CMS,所以它的工作方式就像母版一样,即使它不是,我也不能使用this.parent)。 在某个实例中,我在该页面上有一个ASCX控件加载需要进行一些特殊处理。它需要隐藏/显示位于Page.aspx上的横幅。
我认为其中一个选项可能是在ASCX上触发一个事件,它可以在Page.aspx上实现,以确定是否显示横幅。
现在,如果页面中的其他控件不使用该事件,则不应该中断。这可以实现吗?你对如何实现这种行为有任何其他想法吗?
答案 0 :(得分:2)
您应该使用您建议的事件。这种方法允许实现是通用的,可重用的和松散耦合的。
答案 1 :(得分:1)
通过引用父页面在用户控件本身内执行此操作的另一种方法。这种方式代码被限制在用户控制代码中。像
这样的东西Control oBanner = this.Page.FindControl("BannerID");
if (oBanner != null) {
oBanner.Visible = false;
}
答案 2 :(得分:1)
我同意@freeasinbeer你应该参加一个活动。但是为了将来参考,您始终可以从用户控件访问该页面并调用任何公共函数。
您只需要投射Page
对象。
if (Page.GetType().BaseType.Name == "PageName")
{
((PageName)Page).PublicFunction();
}
答案 3 :(得分:0)
您可以将事件从用户控件冒泡到父级。例如,
<uc1:AddUser ID="AddUser1" runat="Server" OnUserCreated="AddUser1_UserCreated">
</uc1:AddUser>
protected void AddUser1_UserCreated(object sender, CommandEventArgs e)
{
// User was created successfully. Do Something here.
}
public event CommandEventHandler UserCreated;
protected void Button_Click(object sender, EventArgs e)
{
// Create a user
...
// User was created successfully, so bubble up the event to parent.
UserCreated(this, new CommandEventArgs("UserId", userId.ToString()));
}