2009-08-13 7 views
2

J'essaie de remplacer les postbacks par le traitement côté client javascript chaque fois que je peux dans mon code aspnet C# 3.5 afin d'améliorer l'expérience utilisateur. Je n'utilise aucun framework javascript. J'utilise vs2008.Comment utiliser Javascript pour obtenir le nom du UserControl à partir duquel il est appelé?

J'ai un fichier usercontrol .ascx avec une liste déroulante et un bouton qui est utilisé à trois endroits sur mon écran principal.

J'avais fait une publication sur OnSelectedIndexChanged pour la liste déroulante. Je n'ai pas besoin de publier à chaque fois, donc j'ai essayé de mettre une fonction javascript dans le contrôle usercontrol pour vérifier l'élément sélectionné et ne faire une publication que si elle commence par '-'. Cependant, le nom des éléments dont j'ai besoin pour $ get dans ma fonction javascript dépend du nom de l'instance usercontrol qui l'appelle, et j'ai besoin d'obtenir ce nom lors de l'exécution, par exemple: uc1_ddlLocations et uc1_btnPostBack.

Voici le code:

<script type="text/javascript" language="javascript"> 
function ddlChange(this) { 
var loc = $get("GetTheUserControlNameAndInsertHere_ddlLocations"); 
if (loc.value.substring(0,1)=='-') 
{ 
var btn = $get("GetTheUserControlNameAndInsertHere_btnPostBack "); 
btn.click(); 
} 
</script> 

Comment puis-je faire? Quelqu'un peut-il suggérer une meilleure façon de faire ce que j'essaie de faire?

+0

Est-ce que le UserControl lui-même savoir si un postback est nécessaire? Un paramètre "needsPostback" peut-il être passé à ddlChange()? – Mike

+0

Je ne suis pas certain de comprendre votre question. Pour UserControl pour savoir s'il a besoin d'une publication, il doit effectuer une publication. –

+0

@Mike, @Lill: la fonction détermine si la publication est nécessaire, pas le ddl lui-même. Le ddl effectuera toujours une publication ("AutoPostBack = True") ou jamais ("AutoPostBack = false"). Il essaie d'insérer une logique conditionnelle pour réduire le coût de la bande passante. – JustLoren

Répondre

1

Vous pouvez déterminer le nom UserControl en l'analysant avec le nom ddl. S'il vous plaît garder à l'esprit que je ne l'ai pas déboguer la logique de l'analyse, il est peut-être un peu hors :)

<script type="text/javascript" language="javascript"> 
    function ddlChange(ddl) 
    { 

    if (ddl.value.substring(0,1)=='-') 
    { 
     var prefixEndLoc = ddl.id.lastIndexOf("_"); 
     var prefix = ddl.id.subString(0,prefixEndLoc); 
     var btn = $get(prefix + "_btnPostBack "); 
     btn.click(); 
    } 
    } 
</script> 
+0

Juste pour ajouter: 1. besoin d'avoir: dlLocations.Attributes.Add "OnChange", "javascript: locChange (this);"); dans le code pageload derrière pour passer le javascript parm (ddl), et 2. J'ai ajouté un else ddl.blur(); pour supprimer le focus de l'élément de liste déroulante sélectionné. Aurait été déroutant à l'utilisateur autrement. Merci, JustLoren! –

0

utiliser le ClientID de vous contrôler et de donner à votre javascript

0

Vous pouvez régler la ClientID à une variable Javascript du code sous-jacent.

Utilisez cette variable dans un appel javascript pour obtenir l'élément.

Questions connexes