I'm having trouble figuring out what 'EventName' asp.net is expecting in the EventName attribute of an AsyncPostBackTrigger. (The trigger I'm looking at is the drag event on a asp.net WebPart, so if anyone knows the answer based on that, great.)
I read elsewhere that __EVENTTARGET should give me the ID of the control that triggered the event, and __EVENTARGUMENT should give me the name of the event.
To try to figure out what the trigger should be, I've added some code in my page load on postback:
Me.txtEventTarget.Value = Me.Page.Request.Params("__EVENTTARGET")
Me.txtEventArg.Value = Me.Page.Request.Params("__EVENTARGUMENT")
And when I trigger the postback, I get the following output:
txtEventTarget:
ctl00$cphDataEntry$zone2
txtEventArg:
Drag:WebPart_gwpucMyFiles:0
Looks like the 'event arguments' is actually a composite object consisting of three parts: the name of the event, what looks like part of the ID of the control triggering the event, and a value associated with the event.
But what the heck is ASP.Net doing to the IDs? I know it does annoying things with underscores and dollar signs, but why is it using a different format for these two variables? Shouldn't they both contain underscores?
When I view the html source of my page, the control ID looks more like this: "ctl00_cphDataEntry_WebPartManager1_gwpucMyFiles", except it's never just that ID; the ID of child controls are tacked on.
Anyway, when I try this it doesn't work:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ctl00_cphDataEntry_WebPartManager1_gwpucMyFiles" EventName="Drag"/>
</Triggers>
So, does anyone know what I should put in the AsynchronousPostbackTrigger? Is the EventName simply "Drag"? If so, do I need the full ID of my control for the 'ControlID' attribute? If so, how do I determine the full ID? Should it be in dollar-sign format or underscore format?
The ControlID should be the the ID of the web server control. Say you have the following markup inside your ZoneTemplate:
<uc1:MyWebPart ID="MyWebPart1" runat="server" />
You only need "MyWebPart1" for the ControlID property in the AsynchronousPostbackTrigger, even though in the rendered HTML you will see pre-pended IDs of parent controls, with the dollar sign as the delimiter in the "name" attribute and an underscore as a delimiter in the "id" element.
Neither WebPart nor WebPartZone exposes a "Drag" event, but the WebPartManager exposes the WebPartMoving event, so it seems like that's what you want to handle. Try this:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="WebPartManager1" EventName="WebPartMoving" />
</Triggers>
I'll leave it to you to read up on handling that event and identifying which web part triggered it but see if you can at least get the partial-page postback working first.