从动态加载的用户控件更新父页面

时间:2011-02-20 08:24:06

标签: c# asp.net

主持页面:

protected void Page_Load(object sender, EventArgs e)
{
     LoadMyControl(Parameters);  //Do it every page load to preserve it's state           
}

protected void LoadMyControl(string parameters)
{
     plchld.Controls.Clear();

     Control userControl = LoadControl("TheUserControl.ascx");
     userControl.ID = "userControl1";       
     plchld.Controls.Add(userControl);
}

现在在这个控件中,当点击一个按钮时我想要更新,让我们在主机页面上说一个标签。 最好的方法是什么?自定义活动?

2 个答案:

答案 0 :(得分:0)

解决方案可能:

在父页面中添加:

    public Label Actions
{
    get { return _Actions; }
    set { _Actions = value; }
}
用户控件上的

将以下内容添加到顶部

<%@ Reference Page="../parentpage.aspx" %>

并更改值只需在用户控件中执行以下操作

        ASP.parentpage cc = (ASP.parentpage)this.Parent.Page;
        cc.Actions.Text = "hello world";  

答案 1 :(得分:-1)

UserControl具有Page属性,该属性是对添加控件的页面的引用。您可以直接转换为包含标签的已知页面类型, e.g。

protected void Button1_Click(object sender, EventArgs e)
{
    var page = Page as _Default;
    if (page != null)
    {
        page.Label1.Text = "Hello World";
    }
}

但可能更好的是,你装饰了这个控件可以与界面一起使用的页面:

public interface ILabelHost
{
    void SetLabel(string text);
}

public class _Default : System.Web.UI.Page, ILabelHost
{
    ...

这样你可以使用之前的相同逻辑,但是在任何页面上加载控件并实现正确的接口:

protected void Button1_Click(object sender, EventArgs e)
{
    var host = Page as ILabelHost;
    if (host != null)
    {
        host.SetLabel("Hello World");
    }
}