Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Απ:AJAX TabContainer & PostBacks

  •  31-01-2007, 16:29

    Απ:AJAX TabContainer & PostBacks

    Ok! Got it!

    Ευκολο τελικά, αλλά εύκολο και να ξεφύγει!!!

    Το onSubmit event δεν καλείται όταν καλέσεις την form.onsubmit()!!! Αυτό είναι by design και μια και δεν πέφτει κανείς πάνω του συχνά είναι εύκολο να σου διαφύγει. Δείτε σχετικά εδώ κι εδώ.

    Δεν έχω δει αν μπορεί να ξεπεραστεί το θέμα βάζοντας ένα κατάλληλο DOCTYPE στην σελίδα. Θα το ψάξω. Πάντως σε DOM Level 2 θα έπρεπε να τρέχει το onSubmit event της φόρμας ακόμα και αν το submit γίνει με κλήση στην form.submit(). Το DOCTYPE που είχα στην σελίδα με την οποία έκανα τα tests ήταν:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

    Πάντως ένας τρόπος να το ξεπεράσει κανείς είναι να αντικαταστήσει την default __doPostBack. Εγώ έκανα το εξής και δούλεψε:

    protected void Page_Load(object sender, EventArgs e)
    {
       ClientScript.RegisterClientScriptBlock(this.GetType(), "Replace__doPostBack",
          "<SCRIPT LANGUAGE=\"JAVASCRIPT\">\n" +
          "   __doPostBack = __myPostBack;\n" +
          "   function __myPostBack(eventTarget, eventArgument)\n"
    +
          "   {\n" +
          "      if (!theForm.onsubmit || (theForm.onsubmit() != false)) {\n" +
          "         theForm.__EVENTTARGET.value = eventTarget;\n" +
          "          theForm.__EVENTARGUMENT.value = eventArgument;\n" +
          "\n" +
          "          // \n" +
          "          // \n" +
          "          // κάνω fire το event μόνος μου!!! \n" +
          "          theForm.fireEvent('onsubmit'); \n" +
          "\n" +
          "          theForm.submit();\n" +
          "       }\n" +
          "   }\n" +
          "</SCRIPT>\n");
    }

    Αντικατέστησα δηλαδή την __doPostBack με μια δικιά μου έκδοση στην οποία απλά έκανα fire το onSubmit event μόνος μου πριν καλέσω την form.submit(). Δεν είναι λύση βέβαια αυτή γιατί ανάλογα με τον browser μπορεί να φτάσεις να τρέχεις δύο φορές το event. Αποτελεί όμως απόδειξη για την αιτία του προβλήματος...

    Αν έχει κανείς έτοιμη την απάντηση στο θέμα DOCTYPE ή browser DOM Level 2 support ας μου την προσφέρει παρακαλώ. Εν τω μεταξύ θα συνεχίσω να το κοιτάζω αν και φοβάμαι ότι δεν θα βγάλω εύκολα άκρη με αυτό.

    Πάνως ειδικά σε θέματα AJAX (όπου το onSubmit event είναι κρίσιμης σημασίας) υπάρχει σοβαρό πρόβλημα με το συγκεκριμένο θέμα και θα περίμενα να βρω κάποια απλή και straight forward λύση...

     


    rousso
    Δημοσίευση στην κατηγορία: , , , ,
Δείτε όλες τις δημοσιεύσεις της Θεματική Ενότητας
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems