Σήμερα αφιέρωσα λίγο ακόμα χρόνο για να το ψάξω περισσότερο.
Το θέμα εντοπίζεται στο γεγονός ότι η _onsubmit function που ορίζεται στο BaseScripts.js (και παρατίθεται παρακάτω) δεν καλείται παρά μόνο αν το PostBack γίνει μέσω ενός Button ή ImageButton.
_onsubmit : function() {
if (this._clientStateField) {
this._clientStateField.value = this.saveClientState();
}
return true;
}
H _onsubmit όπως φαίνεται και από τον κώδικα αναλαμβάνει να σώσει το ClientState (μέσα στο οποίο θα πρέπει να καταγράψει το ActiveTabIndex).
H _onsubmit ορίζεται ως delegate στον Constructor του AjaxControlToolkit.ControlBase και προστίθεται στον πίνακα με τους submit event handlers του Sys.WebForms.PageRequestManager κατά την εκτέλεση της ControlBase.initialize όπως φαίνεται παρακάτω:
initialize : function() {
AjaxControlToolkit.ControlBase.callBaseMethod(this, "initialize");
// load the client state if possible
if (this._clientStateField) {
this.loadClientState(this._clientStateField.value);
}
// attach an event to save the client state before a postback or updatepanel partial postback
if (typeof(Sys.WebForms)!=="undefined" && typeof(Sys.WebForms.PageRequestManager)!=="undefined") {
Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmit$delegate);
} else {
$addHandler(document.forms[0], "submit", this._onsubmit$delegate);
}
}
Άρα: Τι τρέχει; Γιατί εφόσον προστίθεται στον πίνακα _onSubmitStatements του PageRequestManager, τελικά ποτέ δεν εκτελείται όταν κληθεί η form.onsubmit();
Για να ξεκαθαρίσω αν φταίει ο PageRequestManager πείραξα λίγο την initalize που φαίνεται παραπάνω ώστε να τρέξει το else κομμάτι και να βάλει τον _onsubmit$delegate στην στο submit event της document.form[0]. Τα ίδια! Δεν τρέχει η _onsubmit παρά μόνο ανα κάνεις post με ένα Button ή ImageButton.
Παραμένω αβοήθητος και συνεχίζω την έρευνα...
rousso