0

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

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

现在这不应该中断,以防页面中的其他控件不使用该事件。这可以实现吗?您对如何完成此行为有任何其他想法吗?

4

4 回答 4

2

您应该使用您建议的事件。这种方法允许实现是通用的、可重用的和松散耦合的。

于 2014-04-22T20:03:33.597 回答
1

通过引用父页面在用户控件本身内执行此操作的另一种方法。这种方式代码被限制在用户控制代码中。就像是

Control oBanner = this.Page.FindControl("BannerID");

if (oBanner != null) {
  oBanner.Visible = false;
}
于 2014-04-22T20:09:43.590 回答
1

我同意@freeasinbeer 的观点,你应该参加一个活动。但为了将来参考,您始终可以从用户控件访问页面并调用任何公共函数。

你只需要投射Page物体。

        if (Page.GetType().BaseType.Name == "PageName")
        {
            ((PageName)Page).PublicFunction();
        }
于 2014-04-22T20:12:34.460 回答
0

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

父添加用户.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.
}

添加用户.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()));
}
于 2014-04-22T21:25:06.510 回答