2009-08-12 5 views
1

Quelle est la méthode appropriée pour déclencher un événement de contrôle ASP.NET par programme? Je cherche à refactoriser un petit code et je vois des éléments saupoudrés dans le code derrière codé comme ceci; le développeur appelle le gestionnaire d'événements et le saturer avec des paramètres. pour une DropDownListQuelle est la méthode appropriée pour déclencher un événement de contrôle ASP.NET par programme?

ddlAddress.SelectedIndex = 1; 
ddlAddress_SelectedIndexChanged(null, new EventArgs()); 

& pour une RadioButtonList

rblAction.SelectedIndex = 0; 
rblActionType_SelectedIndexChanged(null, new EventArgs()); 

Est-ce codage pratique normale? Que dois-je faire pour ne pas perturber/casser la page? Toute idée ou suggestion serait appréciée.

Merci, ~ ck à San Diego

Répondre

5

je commencerais en supprimant tout le code de la méthode d'événement réel et factoriser dans une nouvelle méthode appelée AddressChanged ou ce qui convient bien vos normes de nommage. Vous pouvez ensuite appeler cette nouvelle fonction de n'importe où ailleurs dans votre code.

protected void ddlAddress_SelectedIndexChanged(object sender, EventArgs e){ 
    AddressChanged(); 
} 
private void AddressChanged(){ 
    //do the changed event 
} 

private void doingSomething(){ 
    ddlAddress.SelectedIndex = 1; 
    AddressChanged(); 
} 
+0

+1 C'est beaucoup mieux écrit que le mien. Bien fait! –

+0

@Andrew: lol, merci ... – RSolberg

0

Notez que vous appelez l'événement gestionnaire programatically, pas l'événement.

Cela peut indiquer un problème de conception, car les gestionnaires d'événements ne doivent généralement pas s'appuyer les uns sur les autres pour s'exécuter dans un ordre spécifique. Cependant, j'ai vu ce modèle et je l'ai même parfois utilisé lorsque le code qui existait dans un gestionnaire d'événement devait être exécuté dans un autre gestionnaire d'événements et ne pouvait pas être refactorisé à ce moment-là. Vous pouvez définir l '"expéditeur" pour indiquer qu'il vient d'ailleurs dans le code et non du contrôle attendu lui-même, mais c'est un peu trop opaque pour être appelé un bon design. Il est préférable de refactoriser le code qui doit être partagé et de le mettre dans une méthode privée. Les deux gestionnaires d'événements doivent l'utiliser, en transmettant les données de l'expéditeur ou les arguments dont il a besoin.

Questions connexes