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

 

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

The ellusive view state ...

Îåêßíçóå áðü ôï ìÝëïò anjelinio. Τελευταία δημοσίευση από το μέλος anjelinio στις 06-10-2005, 13:47. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-10-2005, 14:54 5896

    The ellusive view state ...

    Καλησπέρα παιδιά ...

    .. έχω σε μια σελίδα 3-4 web user controls, τα οποία χρησιμοποιώ σε ένα "ας πούμε" Wizard. Πολύ πρόσφατα χρησιμοποίησα πάλι αυτά τα controls, αυτή τη φορά μέσα σε άλλα web user controls ( με άλλα λόγια το κάθε ένα είναι contained μέσα σε ένα νέο web user control), και τα φορτώνω δυναμικά στο Page load ...  και ξαφνικά τα controls αυτά δεν έχουν πια Viewstate !!! :(

    Έχω στην base class μου τον εξής κώδικα:

    protected override void LoadViewState(object _state){
                Response.Write("<p>Inside LoadViewState</p>");
                if(_state!=null){
                    Response.Write("<p>Loaded not-null ViewState</p>");
                    this.m_StoredState = _state;
                }

                base.LoadViewState(_state);
            }

    .. για να σιγουρέψω οτι καλείται η μέθοδος, και να δώ αν καλείται με  null state object. Ενώ στην πρώτη περίπτωση βλέπω το σωστό output, στη δεύτερη δεν καλείται ποτέ αυτή η μέθοδος !

    Έχει κανείς την οποιαδήποτε ιδέα για το τι συμβαίνει;;;

    Angel
    O:]
  •  05-10-2005, 16:12 5897 σε απάντηση της 5896

    Απ: The ellusive view state ...

    Χι χι! Smile [:)]
    Classic!!!

    Η LoadViewState δεν καλέιται ποτέ γιατί τα controls τα φτιάχνεις μετά την LoadViewState!

    Το user control σου πρέπει να το κάνεις Load στην OnInit, όχι στην OnLoad της σελίδας...

    Θυμήσου το page life-cycle: 

    1. Init
    2. LoadViewState
    3. (LoadPostData κλπ)
    4. Load
    5. (RaisePostBackEvent και Event Handling)
    6. PreRender
    7. SaveViewState
    8. Render
    9. Dispose

    Αν και απλό τελικά, έχει σπάσει πολύς κόσμος το κεφάλι του με αυτό το θέμα....

    rousso


    rousso
  •  05-10-2005, 17:09 5902 σε απάντηση της 5896

    Απ: The ellusive view state ...

    Ναί, ήταν το πρώτο λάθος μου αυτό, όντως.

    .. ελα μου όμως που τα controls τα κανω τώρα add στην Init  και καλείται η LoadViewState τους, κι εκτός απο 2-3 τιμές που μπαίνουν "με το χέρι" το viewstate τους δεν περιέχει καθόλου control data ! :?

    .. τι τα'θελα τα "Γιουι" γαμώτη μου !!! :D


    Angel
    O:]
  •  05-10-2005, 21:41 5911 σε απάντηση της 5902

    Απ: The ellusive view state ...

    Μήπως βάζοντας το ένα μέσα στο άλλο, ή στην σελίδα, κάπου κάποιο έχει γίνει viewstate false? Την είχα πατήσει με το Poll της πρώτης σελίδας έτσι και παιδευόμουν δέκα μέρες...

     

    George J.

     


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  06-10-2005, 09:07 5925 σε απάντηση της 5911

    Απ: The ellusive view state ...

    Ένα πιθανό θέμα είναι αυτό που λέει ο gcapnias...
    Τσέκαρε αν οποιοδήποτε από τα parent controls των usercontrols σου έχει disabled το viewstate...

    Όμως λάβε υπόψη σου εεπίσης ότι για να υπάρχει viewstate προς "φόρτωση" κατά την LoadViewState πρέπει να υπάρχει ViewState προς "Αποθήκευση" κατά την SaveViewState στον προηγούμενο κύκλο της σελίδας...

    Άρα... Πρέπει να δεις προσκτικά τι ακριβώς κάνεις με τα UserControls σου στην σελίδα καθώς και μέσα στα ίδια τα controls. Π.χ. Αν έχεις κάνεις override (ή handle) την OnRender και θέτεις τιμές εκεί... αυτές δεν πάνε ποτέ στο ViewState γιατί ήδη έχει αποθηκευτεί μέχρι εκέινη την στιγμή (του Render).

    Αν πάλι τα φορτώνεις στην OnInit αλλά κάνεις assignments ή άλλες τροποποιήσεις σε αυτά στην OnLoan (ή αργότερα), τότε απλά κάνεις απλά overwrite το ViewState που φορτώθηκε στην LoadViewState... Για δες μήπως κάνεις τίποτα assignments στα controls στην OnLoad χωρίς να τσεκάρεις πριν αν είσαι σε Page.IsPostBack....

    Επίσης δες αν με τους ελέγχους και τις δοκιμές που έκανες μέχρι τώρα σου έχει ξεφύγει κανένα overiden LoadViewState ή SaveViewState που χαλάει την συνταγή (π.χ. μήπως το έκανες override για να το τσεκάρεις αλλά δεν καλείς το base implementation ή κάνεις άλλη αντίστοιχη παράλειψη).

    Γενικά αν το control το φτιάξεις εφάπαξ πριν την LoadViewState και δεν το αλλάξεις καθόλου μετά την SaveViewState ενώ παράλληλα το ίδιο το control και όλα τα parent controls του δεν έχουν disabled to viewstate, τότε ο μηχανισμός του viewstate πάντα δουλέυει μια χαρά. Αν ΔEN ισχύει η προηγούμενη πρόταση τότε σίγουρα δεν λειτουργεί και ακόμα κι αν σου φαίνεται ότι λειτουργεί... αυτό είναι πάντοτε συμπτωματικό.

    Δες το ή στείλε μας τον κώδικα της σελίδας και των usercontrols σου να το δούμε εμείς...

    goog luck
    rousso
    rousso
  •  06-10-2005, 11:14 5931 σε απάντηση της 5902

    Απ: The ellusive view state ...

    Θα το δω σε μεγαλύτερο βάθος ρε παιδιά, ο κώδικας είναι πολύ μεγάλος για να τον κάνω post εδώ.

    Ευχαριστώ τα μάλλα πάντως :)
    Angel
    O:]
  •  06-10-2005, 13:47 5939 σε απάντηση της 5931

    Απ: The ellusive view state ...

    ... τελικά, αυτό ήταν. Το control δημιουργούσε child controls μετά το LoadViewState & PageLoad. Μια μικρή αλλαγή, κι όλα δουλεύουν ρολόι :)
    Angel
    O:]
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems