Jens Fiederer
asked on
Catching click event inside an UpdatePanel of a User Control
I was experimenting with dynamically loaded user controls.
For some reason, when I load (from PickListUser) my PickList control, the control is displayed reasonably - with Region.xml as given, the repeater shows two lines with a name and button on each.
However, when I click the button, ONLY the load code on my host page (PickListUser) is called (with IsPostBack==true), neither the load event nor the click event on the PickList code behind are triggered.
For some reason, when I load (from PickListUser) my PickList control, the control is displayed reasonably - with Region.xml as given, the repeater shows two lines with a name and button on each.
However, when I click the button, ONLY the load code on my host page (PickListUser) is called (with IsPostBack==true), neither the load event nor the click event on the PickList code behind are triggered.
Picklist.ascx:
---------------------------------
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Picklist.ascx.cs" Inherits="Picklist" %>
<input type="hidden" runat="server" ID="path" />
<input type="hidden" runat="server" ID="parent" />
<asp:Repeater ID="Repeater1" runat="server" >
<ItemTemplate>
<asp:UpdatePanel runat="server" ID="mypanel" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label runat="server" ID="name" Text='<%# Eval("Name") %>' />
<asp:Button runat="server" ID="select" Text="select" /><br />
<asp:Label runat="server" ID="display" />
</ContentTemplate>
</asp:UpdatePanel>
</ItemTemplate>
</asp:Repeater>
Picklist.ascx.cs:
---------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Picklist : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string[] elements = path.Value.Split(',');
XmlDataSource source = new XmlDataSource();
source.DataFile = "App_Data/" + elements[0] + ".xml";
Repeater1.DataSource = source;
Repeater1.DataBind();
}
foreach (RepeaterItem x in Repeater1.Items)
{
(x.Controls[1].Controls[0].Controls[3] as Button).Click += Command;
}
}
protected void Command(object source, EventArgs e)
{
display.Text = "foo";
}
}
PickListUser.aspx
---------------------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PickListUser.aspx.cs" Inherits="PickListUser" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
User!
<asp:ScriptManager runat="server" ID="mgr" />
</div>
</form>
</body>
</html>
PicklistUser.ascx.cs:
---------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
public partial class PickListUser : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Control main = LoadControl("~/Picklist.ascx");
HtmlInputHidden path = main.FindControl("path") as HtmlInputHidden;
path.Value = "region,country,call";
FindControl("form1").Controls.Add(main);
mgr.RegisterAsyncPostBackControl(main);
}
}
}
Region.xml
---------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<regions>
<region name="america" id="1" parent="0"/>
<region name="europe" id="2" parent="0"/>
</regions>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER