ASCX控件需要访问其他页面部分

时间:2014-04-22 20:00:38

标签: c# asp.net sitecore sitecore7 web-user-controls

我有一个正在重复使用的Page.aspx。有点像母版页(我实际上使用的是Sitecore CMS,所以它的工作方式就像母版一样,即使它不是,我也不能使用this.parent)。 在某个实例中,我在该页面上有一个ASCX控件加载需要进行一些特殊处理。它需要隐藏/显示位于Page.aspx上的横幅。

我认为其中一个选项可能是在ASCX上触发一个事件,它可以在Page.aspx上实现,以确定是否显示横幅。

现在,如果页面中的其他控件不使用该事件,则不应该中断。这可以实现吗?你对如何实现这种行为有任何其他想法吗?

4 个答案:

答案 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)

您可以将事件从用户控件冒泡到父级。例如,

ParentAddUser.aspx

<uc1:AddUser ID="AddUser1" runat="Server" OnUserCreated="AddUser1_UserCreated">
</uc1:AddUser>

ParentAddUser.aspx.cs

protected void AddUser1_UserCreated(object sender, CommandEventArgs e)
{
    // User was created successfully. Do Something here.
}

AddUser.ascx.cs

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()));
}