Οκ, μια και έφαγα σχεδόν μια μέρα για να δω τι μου γίνεται, και στο τέλος έμεινα με την απορία ευελπιστώ ότι κάποιος μπορεί να μεταγγίσει τα φώτα του :)
Λοιπόν το σενάριο είναι το εξής απλό: υπάρχει ένα 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