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

 

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

Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

Îåêßíçóå áðü ôï ìÝëïò nistam. Τελευταία δημοσίευση από το μέλος nistam στις 02-11-2006, 09:30. Υπάρχουν 13 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-10-2006, 11:55 18550

    Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Χαίρετε κύριοι.

    Είναι η πρώτη φορά που ποστάρω στο φορουμ. Μέχρι τώρα συνήθως έλυνα τα προβλήματά μου μετά από αρκετό ψάξιμο. Εφτασε η στιγμή όμως που πραγματικά έχω κολλήσει.

    Εχω φτιάξει λοιπόν ένα μικρό site το οποίο έχει 3 combo boxes. Οταν ο χρήστης κάνει επιλογή από το 3ο combobox, το πρόγραμμα δημιουργεί δυναμικά web controls τα οποία μπορεί να είναι checkbox, textbox, numeric, datechooser και datetime (χρησιμοποιώ κατά κόρον τα controls της Infragistics). Το τί είδους control θα δημιουγήσει εξαρτάται από την πληροφορία που περιλαμβάνει ένας πίνακας  σε μία βάση MS SQL2005. Για να τοποθετηθούν όμορφα στη σελίδα, τα προσθέτω σε έναν πίνακα από τα Standard controls. Ο πίνακας προυπάρχει, απλά δεν έχει γραμμές και κελιά. Αυτά δημιουργούνται αμέσως μετά την επιλογή του χρήστη. Η ρουτίνα που διαβάζει τις εγγραφές βρίσκεται στο PreRender της φόρμας ώστε να δημιουργούνται κάθε φορά που γίνεται postback μετά από μία επιλογή. Υπάρχει και ένα κουμπί, π.χ. Υποβολή, το οποίο πρέπει να διαβάσει τις τιμές που έχει πληκτρολογήσει ο χρήστης στα δυναμικά controls και να τρέξει ένα query. Το ΜΕΓΑΛΟ πρόβλημα είναι ότι δεν μπορώ να αποθηκευσω τις τιμές που πληκτρολόγησε ο χρήστης και να τις ξαναφορτώσω στο postback που γίνεται. Θεωρώ ότι μόλις πατήσω το κουμπί για να τρέξει το query, θα πρέπει πρώτα να αποθηκευω τις τιμές στο viewstate/sessionstate, έλα όμως που τα controls επαναδημιουργούνται σε κάθε postback, οπότε χάνονται και οι τιμές! Και μάλιστα όταν προσπαθώ να τα αποθηκευσω στο viewstate εμφανίζεται runtime error ότι τα controls δεν είναι serializable.

    Θα ήμουν ευγνώμων για μία οποιαδήποτε λύση. Ευχαριστώ παιδιά.

  •  13-10-2006, 12:12 18551 σε απάντηση της 18550

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    μπορείς να τα βάλεις σε ένα multiview και κάθε φορά να εμφανίζεις το κατάλληλο view

  •  13-10-2006, 12:56 18556 σε απάντηση της 18550

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Ακόμα και αν τα controls σου έχουν δημιουργηθεί δυναμικά, κατά το postback οι τιμές τους βρίσκονται αποθηκευμένες στο session state χωρίς να κάνεις κάτι εσύ γι'αυτό. Το πρόβλημά σου βρίσκεται στο σημείο που τα δημιουργείς όταν έχεις το τελευταίο postback: στο PreRender είναι πλέον αργά, γιατί δε θα υπάρξει επόμενο βήμα στον κύκλο ζωής της σελίδας που μπορεί να σου φορτώσει τις τιμές από το view state. Αντίθετα, μετά από το PreRender θα αποθηκευθεί το τρέχον view state εξαφανίζοντας τις τιμές.
    Για να φορτωθούν οι τιμές από το view state, πρέπει η δημιουργία των νέων controls να μεταφερθεί νωρίτερα στον κύκλο ζωής της σελίδας, δηλαδή στο Load.
    Για περισσότερα διάβασε αυτό: ASP.NET Page Life Cycle Overview


    Νατάσα Μανουσοπούλου
  •  13-10-2006, 12:58 18557 σε απάντηση της 18550

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Ούτως ή άλλως τα controls δημιουργούνται σε κάθε postback. Εκτός και αν το Multiview διατηρεί τα δυναμικά controls. Δηλαδή τα δημιουργώ εγώ και τα βάζω μέσα στο view, και δε με νοιάζει αν θα γίνει postback, εκτός και αν ο χρήστης επιλέξει αλλη επιλογή από το 3ο Combobox. Να σημειώσω ότι οι επιλογές του combobox ανακτώναι και αυτές από πίνακα. Οι επιλογές αυτές μπορεί άυριο να απαιτούν να εμφανίζονται περισσότερα δυναμικά controls διαφορετικού τύπου.
  •  13-10-2006, 13:18 18558 σε απάντηση της 18557

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    αν χρησιμοποιήσεις multiview δεν χρειάζεται να είναι δυναμικά τα controls (απλά μην τα κάνεις databind παρά μόνο όταν πραγματικά τα χρειαστείς) Θα τα έχεις όλα συνέχεια.
  •  13-10-2006, 13:31 18559 σε απάντηση της 18550

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Πρέπει να είναι δυναμικά, γιατί μπορεί σήμερα η επιλογη του χρηστη να απαιτει την υπαρξη 2 textboxes και 1 date και αυριο να μου ζητησει να φαινεται και ακομα 1 textbox. Θα ξανακανω compile το project; Ειναι μπλεξιμο. Εχω κολλησει στην κυριολεξία.
  •  13-10-2006, 13:39 18560 σε απάντηση της 18559

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    αρα ακολουθείς τις οδηγίες της Νατάσας
  •  13-10-2006, 14:08 18561 σε απάντηση της 18550

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Και πάλι δεν παίζει.

    Η διαδικασία έχει ως εξής:

    1) Κλικ του χρήστη στο combobox

    2) Στο selectionchange event υπάρχει κώδικας ο οποίος διαβάζει από τη βάση τα πεδία που θα πρέπει να δημιουργήσει. 1, 2, 5, 20, δεν έχει σημασία. Στο σημείο αυτό εγώ αρχικά εμφάνιζα τα controls, αλλά με το postback που γινόταν μετά από το πιο πάνω event, δεν εμφανιζόταν τίποτα. Οπότε και αποθηκευω στο viewstate το dataset που επιστρέφεται από τη βάση, ώστε να το διαβάσω μετά, προς το παρόν, στο PreRender(στο Load δεν εμφανίζεται τίποτα). Ωραία, εμφανίστηκαν

    3) Ο χρήστης πληκτρολογεί κάποιες τιμές σε κάποια ή σε όλα τα controls

    4) Πατάει κάποιο κουμπί, οπότε γίνεται postback. Εγώ αναγκαστικά ξαναδημιουργώ τα controls (είπαμε στο PreRender), αλλά δεν έχω τιμές γιατί δεν μπορώ να τις διαβάσω από πριν, αφου στην ουσία δεν υπάρχουν.

    Ολα τα controls εμφανίζονται μέσα σε πίνακα για ομοιομορφη εμφάνιση. Ο πίνακας εμφανίζεται σε ένα Panel, γιατί αλλιώς δεν εμφανίζεται τίποτα. Κάτι μου έχει ξεφύγει σίγουρα.

  •  14-10-2006, 09:19 18593 σε απάντηση της 18561

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Έχεις τσεκάρει αυτό το άρθρο; http://aspnet.4guysfromrolla.com/articles/092904-1.aspx

    Περιγράφει και έχει παράδειγμα αυτού που προσπαθείς να κάνεις. Ιδιαίτερα στην παράγραφο με τίτλο "Adding Controls at the Right Time" αναλύει πότε πρέπει να κάνεις add τα controls.


    Vir prudens non contra ventum mingit
  •  16-10-2006, 11:06 18629 σε απάντηση της 18550

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Τελικά, επρεπε να βάλω τη ρουτινα που δημιουργεί τα controls στο Page_Init. Καθε φορά τώρα δημιουργούνται και διατηρούν τις τιμές τους. Περασα στη ρουτίνα όμως καρφωτα την επιλογή που θωρητικά θα έκανε. Ειδάλλως, δεν μπορώ να τη διαβάσω από την init. Εχω δοκιμάσει να την αποθηκευσω και σε cookie και σε session, αλλά σε καθε postback και το session και το cookie ειναι nothing. Εάν πρέπει να έχουν τιμές όταν εκτελείται το init event, τότε μάλλον χρησιμοποιώ τα οbjects αυτά με λάθος τρόπο.

    Ευχαριστώ όλους για τις απαντήσεις σας!!!

  •  16-10-2006, 11:24 18630 σε απάντηση της 18629

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Οχι λαθος. Το cookie στο οποίο δοκιμάζω να κρατήσω την επιλεγμένη τιμή, διατηρείται, απλά δεν είχα δηλώσει το expiration. Το θέμα είναι οτι την πρώτη φορά που θα επιλεγεί μία τιμή, το cookie θα ειναι κενό, την επόμενη φορά που θα επιλεγεί μία οποιαδήποτε αλλη τιμή, το cookie θα περιέχει την προηγούμενη κλπ κλπ. Καταλαβαίνω τί συμβαίνει αλλά πώς μπορώ να κάτι άλλο; Το cookie αποθηκευεται στον κώδικα του SelectionChangeEvent του combobox (Το control ειναι της Infragistics, γι'αυτό έχει αυτή την ονομασία). Καμία πρόταση; Οχι απαραίτητα πάνω σε cookies.
  •  16-10-2006, 15:24 18637 σε απάντηση της 18630

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Μέσα στη INit, τα δυναμικά σου controls δεν έχουν ακόμη viewstate φορτωμένο, Οπότε, εάν χρειάζεσαι μια τιμή απο αυτά για να αποφασίσεις τι θα φορτώσεις δυναμικά, καλύτερα να διαβάσεις το request parameter "με το χέρι κάπως έτσι Request("mycontrolid") ...

    Ελπίζω να "έπιασα" το τί ήθελες ακριβώς να κάνεις.
    Angel
    O:]
  •  16-10-2006, 15:24 18638 σε απάντηση της 18550

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Εντάξει παιδιά. Ολα οκ. Σας ευχαριστω .
  •  02-11-2006, 09:30 19686 σε απάντηση της 18550

    Απ: Επαναφόρτωση τιμών σε δυναμικά controls μετά από Postback .

    Λοιπόν, μετά από αρκετά τεσταρίσματα εντόπισα, το εξής: Οταν τρέχω την εφαρμογή μέσα από το IDE το οποίο χρησιμοποιεί τον ASP.NET Development Server σε ενα τυχαιο port, όλα καλά. Μόλις ο χρήστης κάνει την επιλογή η οποία θα του εμφανίσει δυναμικά textboxes/checkboxes/dates και δεν ξερω γω τί, εμφανίζονται. Υπόψην ότι από την Page_Init διαβάζω ένα cookie το οποίο έχω αποθηκευσει με javascript και το οποίο κρατάει την επιλογή που μόλις έκανε ο χρήστης, και στο καπάκι πάλι μέσα από την Page_init δημιουργώ τα controls μου τα οποία κάθε φορά έχουν τις τιμές που έχει πληκτρολογήσει, εκτός και αν αλλάξει επιλογή. Ολα καλά ως εδώ. Εάν τώρα την κανω compile και την τρέξω από τον IE, τις πρώτες 2-3 φορές τα controls δημιουργούνται μετά από το postback. Από ένα σημείο και μετά όμως όχι, και μάλιστα η τιμή του cookie είναι Null. Υπάρχει ρε παιδιά, καποιος τρόπος να χρησιμοποιώ την τιμή της επιλογής του χρήστη στα postbacks και να τη χρησιμοποιώ προτού εκτελεστεί το page_load; Κάτι μου λέει ότι αυτό που ανέφερα οφείλεται στον τρόπο που ο IIS χειρίζεται τα cookies, αφού μέσα από το IDE παίζει. Για πέστε μου καμιά ιδέα, γιατί είναι η μόνη λεπτομέρεια (και πιο ουσιαστική) που μου έχει μείνει.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems