S
seigo
Hello,
I faced with the following problem. I have a PlaceHolder on a page and
a few UserControls which have custom events, for instance:
public delegate void SelectHandler(object sender, SelectEventArgs
e);
public event SelectHandler OnSelect;
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
SelectEventArgs ev = new
SelectEventArgs(DropDownList1.SelectedValue);
if (OnSelect != null)
{
OnSelect(this, ev);
}
}
This control fire an event when user select some value from DropDown
and click on Button.
On page where I placed PlaceHolder I need to dynamically load those
UserControls. I use the following code:
protected void Button1_Click(object sender, EventArgs e)
{
PlaceHolder1.Controls.Clear();
UserControls_WebUserControl control =
(UserControls_WebUserControl)LoadControl("~/UserControls/WebUserControl.ascx");
control.OnSelect += new
UserControls_WebUserControl.SelectHandler(control_OnSelect);
PlaceHolder1.Controls.Add(control);
PlaceHolder1.DataBind();
}
protected void Button2_Click(object sender, EventArgs e)
{
PlaceHolder1.Controls.Clear();
PlaceHolder1.Controls.Add(LoadControl("~/UserControls/WebUserControl2.ascx"));
PlaceHolder1.DataBind();
}
But I got the exception when trying to load a new UserControl at second
time:
Failed to load viewstate. The control tree into which viewstate is
being loaded must match the control tree that was used to save
viewstate during the previous request. For example, when adding
controls dynamically, the controls added during a post-back must match
the type and position of the controls added during the initial request.
And if I load at first UserControl where I use custom event it doesn't
work.
I decided to place loading UserControl with custom event in overridden
OnInit method:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
PlaceHolder1.Controls.Clear();
UserControls_WebUserControl control =
(UserControls_WebUserControl)LoadControl("~/UserControls/WebUserControl.ascx");
control.OnSelect += new
UserControls_WebUserControl.SelectHandler(control_OnSelect);
PlaceHolder1.Controls.Add(control);
PlaceHolder1.DataBind();
}
but know I cannot load other UserControl to PlaceHolder.
Hope the problem is clear and thanks for any ideas or help!
Regards,
Alex.
I faced with the following problem. I have a PlaceHolder on a page and
a few UserControls which have custom events, for instance:
public delegate void SelectHandler(object sender, SelectEventArgs
e);
public event SelectHandler OnSelect;
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
SelectEventArgs ev = new
SelectEventArgs(DropDownList1.SelectedValue);
if (OnSelect != null)
{
OnSelect(this, ev);
}
}
This control fire an event when user select some value from DropDown
and click on Button.
On page where I placed PlaceHolder I need to dynamically load those
UserControls. I use the following code:
protected void Button1_Click(object sender, EventArgs e)
{
PlaceHolder1.Controls.Clear();
UserControls_WebUserControl control =
(UserControls_WebUserControl)LoadControl("~/UserControls/WebUserControl.ascx");
control.OnSelect += new
UserControls_WebUserControl.SelectHandler(control_OnSelect);
PlaceHolder1.Controls.Add(control);
PlaceHolder1.DataBind();
}
protected void Button2_Click(object sender, EventArgs e)
{
PlaceHolder1.Controls.Clear();
PlaceHolder1.Controls.Add(LoadControl("~/UserControls/WebUserControl2.ascx"));
PlaceHolder1.DataBind();
}
But I got the exception when trying to load a new UserControl at second
time:
Failed to load viewstate. The control tree into which viewstate is
being loaded must match the control tree that was used to save
viewstate during the previous request. For example, when adding
controls dynamically, the controls added during a post-back must match
the type and position of the controls added during the initial request.
And if I load at first UserControl where I use custom event it doesn't
work.
I decided to place loading UserControl with custom event in overridden
OnInit method:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
PlaceHolder1.Controls.Clear();
UserControls_WebUserControl control =
(UserControls_WebUserControl)LoadControl("~/UserControls/WebUserControl.ascx");
control.OnSelect += new
UserControls_WebUserControl.SelectHandler(control_OnSelect);
PlaceHolder1.Controls.Add(control);
PlaceHolder1.DataBind();
}
but know I cannot load other UserControl to PlaceHolder.
Hope the problem is clear and thanks for any ideas or help!
Regards,
Alex.