主持页面:
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);
}
现在在这个控件中,当点击一个按钮时我想要更新,让我们在主机页面上说一个标签。 最好的方法是什么?自定义活动?
答案 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");
}
}