hello guys.
well, since you cannot build your own triggers (http://forums.asp.net/thread/1345373.aspx), i though i'd share a quick tip on how to have partial postbacks when you have a dependency between an event on a user control and an updatepanel (ie, you have a trigger).
so, what you have to do is call the registerasyncpostbackcontrol on the user control and pass in the control that will start the postback. here's a small sample:
user control
<%@ Control Language="C#" ClassName="MyUserControl" %>
<script runat="server">
private object aux = new object();
public event EventHandler BtClicked
{
add
{
this.Events.AddHandler(aux, value);
}
remove
{
this.Events.RemoveHandler(aux, value);
}
}
void h(object s, EventArgs e)
{
OnBtClicked(e);
}
protected void OnBtClicked(EventArgs a)
{
if (this.Events[aux] != null)
{
((EventHandler)(this.Events[aux]))(this, a);
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
Microsoft.Web.UI.ScriptManager manager = Microsoft.Web.UI.ScriptManager.GetCurrent(this.Page);
if (manager != null)
{
manager.RegisterAsyncPostBackControl(bt);
}
}
</script>
<asp:Button runat="server" ID="bt" Text="Submit" OnClick="h" UseSubmitBehavior="false" />
aspx page
<%@ Page Language="C#" %>
<%@ Register Src="MyUserControl.ascx" TagName="MyUserControl" TagPrefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void h(object o, EventArgs e)
{
lbl.Text = DateTime.Now.ToString();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<atlas:ScriptManager runat="server" ID="manager" EnablePartialRendering="true">
</atlas:ScriptManager>
<script type="text/javascript" src="Atlas.js">
</script>
<atlas:UpdatePanel runat="server" ID="pane">
<ContentTemplate>
<%= DateTime.Now.ToString() %>
</ContentTemplate>
<Triggers>
<atlas:ControlEventTrigger ControlID="MyUserControl1" EventName="BtClicked" />
</Triggers>
</atlas:UpdatePanel>
<%= DateTime.Now.ToString() %>
<uc1:MyUserControl id="MyUserControl1" runat="server" onbtclicked="h">
</uc1:MyUserControl></div>
<asp:Label runat="server" ID="lbl" />
</form>
</body>
</html>
hope this helps.