2009-03-20 6 views
0

J'ai une page ASPX définie comme suit:Pourquoi l'étiquette ne change-t-elle pas de couleur à l'aide de RegisterClientScriptBlock?

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 

    <script type="text/javascript" language='javascript'> 
     function changecolor() { 
      var lbl = document.getElementById('lblDisplayDate'); 
      lbl.style.color = 'red'; 
     }; 
    </script> 

</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:Label ID="lblDisplayDate" runat="server" 
       Text="Label"></asp:Label><br /> 

    <asp:Button ID="btnPostBack2" runat="server" 
       Text="Register Client Block Script" 
       onclick="btnPostBack2_Click" /> 

</div> 
</form> 

Voici l'événement btnPostBack2 Cliquez:

protected void btnPostBack2_Click(object sender, EventArgs e) 
{ 
    if (!ClientScript.IsClientScriptBlockRegistered("JSScriptBlock")) 
    { 
     ClientScript.RegisterClientScriptBlock(this.GetType(), 
     "JSScriptBlock", 
     "changecolor();", 
     true); 
    } 
} 

Même si, je mets le script dans une fonction pour changer la couleur, il ne le fait toujours pas et pourquoi ai-je besoin d'ajouter les balises de script à true si la fonction est déjà incluse dans des balises de script? LblDisplayDate est dans le chargement de page où il est défini à l'heure actuelle à chaque rechargement de page.

Répondre

0

Modifier cette ligne:

var lbl = document.getElementById('lblDisplayDate'); 

à:

var lbl = document.getElementById('<%= lblDisplayDate.ClientID %>'); 

De plus, cela est probablement fait pas ce que vous voulez faire de toute façon. Essayez d'ajouter:

OnClientClick="changecolor()" 

à votre balise <asp:Button />.

Modifier A ce moment je suis assez confus quant à ce que vous essayez d'accomplir exactement ...

Si vous voulez juste changer la couleur de l'étiquette sans affichage arrière, changer votre <asp:Button /> à un normale <input type="button" /> avec un gestionnaire onclick et appelez votre script, comme ceci:

<input type="button" ... onclick="changeColor();" /> 

Si vous voulez changer la couleur de l'étiquette tout en affichant en arrière, puis il suffit de changer l'arrière-plan de l'étiquette dans la code-behind comme ceci:

protected void btnPostBack2_Click(object sender, EventArgs e) 
{ 
    /* ... other stuff goes here ... */ 
    lblDisplayDate.BackColor = Color.Red; 
    /* ... other stuff goes here ... */ 
} 
0

comme ce que Sean a déjà dit: il est préférable d'utiliser OnClientClick dans ce cas. OnClientClick empêcherait un postback de se produire - il est fait dynamiquement en utilisant javascript. Tout ce que vous devez faire est de le préférer à la fonction javascript. Je ne comprends pas que vous voulez faire un "RegisterStartupScript et RegisterClientScriptBlock" sur le changement de couleur. Ceux-ci devraient être employés quand vous voulez ajouter le javascript du code derrière, mais voyant que vous l'avez déjà écrit dehors dans la page d'aspx, son utilisation est inutile.

0

Vérifiez cela. J'ai modifié votre code et son fonctionnement maintenant sans publication.

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
    <script type="text/javascript" language='javascript'> 
     function changecolor() { 
      var lbl = document.getElementById('lblDisplayDate'); 
      lbl.style.color = 'red'; 
     }; 
</script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
<div> 
<asp:Label ID="lblDisplayDate" runat="server" 
      Text="Label"></asp:Label><br /> 

<asp:Button ID="btnPostBack2" runat="server" 
      Text="Register Client Block Script" 
      OnClientClick="changecolor(); return false" /> 

    </div> 
    </form> 
    </body> 
</html> 

espérons que cette aide

Questions connexes