Hi,
I have a scheduler control with a context menu like so:
<DayPilot:DayPilotMenu ID="DayPilotMenu1" runat="server" CssClassPrefix="menu_">
<DayPilot:MenuItem Text="Send" Action="JavaScript" JavaScript="dps1.eventMenuClickCallBack(e, command);">
</DayPilot:MenuItem>
<DayPilot:MenuItem Text="Refresh" Action="Postback" Command="Refresh">
</DayPilot:MenuItem>
</DayPilot:DayPilotMenu>
I would expect both the send and refresh commands to work similarly and call the server-side DayPilotScheduler1.EventClick routine. However EventClick fires at a different point in the asp.net lifecycle in each case and this causes problems with rendering. Using debugging I can see that the 'Refresh' command (using a normal postback) causes the EventClick handler to fire, followed by Page.LoadComplete and then Page.PreRender. However, the 'Send' command (using javascript to create a postback) fires Page.LoadComplete followed by EventClick. At this point the asp.net page seems to skip the rest of the lifecycle, and Page.PreRender never fires. Other controls on the page also reach the PreRender stage.
I discovered this when trying to create a 'delete' command in a context menu. Because I wanted the user to confirm the action I used:
<DayPilot:MenuItem Action="JavaScript" Command="Delete" Text="Delete" JavaScript="if (confirm('Delete ' + e.text() + '?')) dps1.eventMenuClickCallBack(e, command);" >
</DayPilot:MenuItem>
In the EventClick handler I was rebinding a gridview also on the page so that it would reflect the fact that a record had been deleted (using GridView1.Databind()). Databind was successfully called and I could see that there was one fewer row bound to the grid, but as the asp.net page stopped processing before re-rendering controls the gridview still showed the old deleted row.
Hope this makes sense - I've been tying myself in knots with this all day. This may be one of the many things I don't understand about asp.net.