2008-10-03 8 views
1

J'ai beaucoup de difficulté à trouver un modèle standard/une bonne pratique qui traite du rendu des contrôles enfants dans un composite basé sur une valeur de propriété.Propriétés du contrôle serveur personnalisé Asp.Net 2

Voici un scénario de base. J'ai un contrôle composite qui a deux contrôles enfants, une zone de texte et une liste déroulante. Disons qu'il y a une propriété qui permute quel enfant rendre.

donc:

myComposite.ShowDropdown = true; 

Si cela est vrai, il montre un menu déroulant, sinon il montre la zone de texte.

La valeur de la propriété doit être enregistrée entre les publications, et le contrôle correct doit être affiché en fonction de la valeur de publication.

De bons exemples là-bas?

Répondre

3

Vous utilisez ViewState pour stocker la valeur de la propriété afin qu'il persiste entre postbacks mais vous devez le faire correctly.

public virtual bool ShowDropdown 
{ 
    get 
    { 
     object o = ViewState["ShowDropdown"]; 
     if (o != null) 
     return (bool)o; 
     return false; // Default value 
    } 
    set 
    { 
     bool oldValue = ShowDropdown; 
     if (value != oldValue) 
     { 
     ViewState["ShowDropdown"] = value; 
     } 
    } 
} 

probablement quelque part dans votre méthode Render vous afficher ou de masquer le contrôle DropDown en fonction de la valeur de la propriété:

dropDown.Visible = ShowDropDown; 
textBox.Visible = !ShowDropDown; 

Voir aussi Composite Web Control Example.

0

Je pense quelque chose comme:

public bool ShowDropDown 
{ 
    get{ return (bool)ViewState["ShowDropDown"]; } 
    set{ ViewState["ShowDropDown"]; } 
} 


private void Page_Load(object sender, EventArgs e) 
{ 
    DropDaownControl.Visible = ShowDropDown; 
    TextBoxControl.Visible = !ShowDropDown; 
} 
/* some more code */ 
+0

Si cette propriété n'est pas définie par l'appelant, vous obtiendrez NullReferenceException dans la méthode get. –

Questions connexes