We want to save some state on an Extender just before the page is posted back or submitted. We were just listening to the form's submit event
$addHandler(form,"submit", this._formSubmitDelegate);
but that doesn't fire when we postback is via a LinkButton so I want to catch that happening and reuse the same delegate.
I looked at using
$addHandler(Sys.WebForms.PageRequestManager.getInstance(),'endrequest',this._endRequestDelegate);
but add Handler did not like non DOM elements being passed in. I then tried
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this.endRequestHandler);But the value of "this" was not what I was expecting. I am currently trying
if (typeof(Sys.WebForms)!=="undefined" &&typeof(Sys.WebForms.PageRequestManager)!=="undefined"){ Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements,this._formSubmitDelegate); }else { $addHandler(form,"submit",this._formSubmitDelegate); }
This seems to call formSubmitDelegate and all works well. I realise i am accessing _onSubmitStatements which should be considered private. Am I cheating? What is the correct way of doing it?
TIA
Paddeo
Hi Paddeo,
Why the second one doesn't meet your requirement?
It's the recommended way that how a handler is added.
Well when my page is "Posted back" and that postback is caused by something causing validation WebForm_DoPostbackWithOptions is called. At the end of that routine it passes off to a ASP.NET AJAX routine that will do the "postback" using a WebRequest. That does NOT cause our Form Submit event to fire.
I thought I could get around this by trapping both the Submit AND adding to the _onSubmitStatements array (I realise that my eariler post was doing it OR the other) however this is still not enough. If I had a simple AutoPost=True ASP.Net CheckBox that calls _doPostback that exists in the page itself. This does not cause my onSubmitStatements to fire nor does it call DoPostbackWithOptions so yet again I have an issue with reliably catching postbacks and submits.
To this end I am going to give up trying to lazy write to state and just serilaise it every time it changes.
Pat
Saving client state on PropertyChanged event.
Yes, sorry I should have reported back. PropertyChanged is exactly what i changed to and that works much better. Even the approaches above were not enough to catch all the postbacks
No comments:
Post a Comment