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

 

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

Composite Control Design Time Rendering

Îåêßíçóå áðü ôï ìÝëïò Oldgeorge. Τελευταία δημοσίευση από το μέλος Oldgeorge στις 14-05-2008, 13:25. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-05-2008, 14:07 41890

    Composite Control Design Time Rendering

    Οκ, μια και έφαγα σχεδόν μια μέρα για να δω τι μου γίνεται, και στο τέλος έμεινα με την απορία ευελπιστώ ότι κάποιος μπορεί να μεταγγίσει τα φώτα του :)

    Λοιπόν το σενάριο είναι το εξής απλό: υπάρχει ένα custom server control τύπου composite control το οποίο επί του παρόντος περιέχει μόνο ένα image control. Τα declarations που μας ενδιαφέρουν είναι τα εξής:

    public class HelpDialog : CompositeControl
    {

    private Image image;

    protected override void CreateChildControls()
    {
    Controls.Clear();

    image = new Image();
    Controls.Add(image);
    }

    public virtual string ImageUrl
    {
    get
    {
    EnsureChildControls();
    return ViewState["ImageUrl"] != null ? (string)ViewState["ImageUrl"] : image.ImageUrl;
    }
    set
    {
    EnsureChildControls();
    ViewState["ImageUrl"] = value;
    image.ImageUrl = value;
    }
    }

    Το αποτέλεσμα του παραπάνω ήταν ότι ενώ το control δούλευε κανονικά (ο υπόλοιπος κώδικας με τα javascript handlers κλπ δεν χρειάζεται), στο design time το image child control δεν έδειχνε τίποτα παρόλο που το ImageURL ήταν δηλωμένο σωστά. Το ίδιο πράγματα με control derived από το Image δούλευε άψογα (οπότε δεν είναι θέμα paths, κλπ).

    Κάνοντας μια μικρή εγχείρηση και αλλάζοντας το header του control σε

    [Designer(typeof(HelpControlDesigner))]
    [ParseChildren(false)]
    public class HelpDialog : CompositeControl

    και προσθέτοντας το απλό

    class HelpControlDesigner : CompositeControlDesigner
    {
    public override string GetDesignTimeHtml()
    {

    //return base.GetDesignTimeHtml();
    HelpDialog x = (HelpDialog)base.Component;
    return "<img src='" + x.ImageUrl + "'/>";
    }
    }

    όλα δουλεύουν μια χαρά. Αλλά πιστεύω ότι δεν χρειάζεται αυτό το Override για να δουλέψει κάτι τόσο απλό, οπότε νομίζω ότι κάτι κάνω λάθος (και δεν θα ήθελα να το βρω μπροστά μου στην συνέχεια). Έχει κανείς καμιά ιδέα;

    υ.σ. Όλα τα παραπάνω σε vs2005


    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
  •  10-05-2008, 07:32 41897 σε απάντηση της 41890

    Απ: Composite Control Design Time Rendering

    Δεν έχεις κάτι λάθος.

    Το ότι φτιάχνεις ένα control σε ASP.NET υλοποιώντας μόνο τα απαραίτητα και δουλεύει μέσα στις σελίδες σου, δεν πάει να πει ότι έχει και την πλήρη υποστήριξη από το Visual Studio. Για να μπορέσεις να έχεις support του designer του Visual Studio χρειάζεται να υλοποιήσεις τον designer. Δεν είσαι υποχρεωμένος, αλλά αισθάνεσαι καλύτερα όταν ρίχνεις το control σου στο designer και κάνει και εκεί κάτι...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  12-05-2008, 15:51 41931 σε απάντηση της 41897

    Re: Απ: Composite Control Design Time Rendering

    Ναι υποθέτω :)

    Απλά συνεχίζω να απορώ γιατί ένα custom control που γίνεται derived από το image κάνει render μια χαρά, ενώ ένα αντίστοιχο με τα ίδια ακριβώς πράγματα που ξεκινάει από composite control θέλει designer :(  Προφανώς, it's working as intended.  Θα σας ξαναταλαιπωρήσω λίαν συντόμως με κάτι θεματάκια σχετικά με το property persistence στον designer, αλλά δεν έχω τελειώσει το μαλιοτράβηγμα ακόμη :)


    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
  •  13-05-2008, 21:49 41969 σε απάντηση της 41931

    Απ: Re: Απ: Composite Control Design Time Rendering

    Η κλήση της EnsureChildControls(); είναι απαραίτητη;

  •  14-05-2008, 13:25 41982 σε απάντηση της 41969

    Απ: Composite Control Design Time Rendering

    Απ'όσο έχω διαβάσει, η EnsureChildControls() είναι απαραίτητη σε όλα τα custom controls που ξεκινάνε από το CombositeControl γιατί αλλιώς δεν είναι σίγουρο ότι τα περιεχόμενα controls θα έχουν δημιουργηθεί την ώρα που προσπαθείς να τους δώσεις/πάρεις κάποια properties μέσω delegates.  Γενικά αυτό το κομμάτι δεν μου παρουσιάζει πρόβλημα, εκεί που έχω μπλεχτεί τώρα είναι στο viewstate persistence lower level properties (π.χ. τμήματα ενός style) αλλά δεν ξέρω αν θα προλάβω να το δω εις βάθος αυτή την στιγμή :( (μια και super inelegant χακίες έχουν φέρει το επιθυμητό αποτέλεσμα πριν το deadline). 

    Μήπως έχει κανείς κάποιο καλό και χρήσιμο link για αυτό το θέμα (πάντα σχετικά με κάποιο composite control, τα απλά δουλεύουν μια χαρά);

     


    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems