2009-03-20 5 views
0

ich eine aspx Seite definiert haben, wie folgt:Warum ändert sich das Etikett nicht mit 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> 

Hier wird das btnPostBack2 Ereignis Click ist:

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

Auch wenn, habe ich das Skript in einer Funktion die sich ändern Farbe, tut es immer noch nicht und warum muss ich die Skript-Tags zu True hinzufügen, wenn die Funktion bereits in Skript-Tags eingeschlossen ist?

lblDisplayDate ist in der Seite laden, wo es auf die aktuelle Zeit auf jeder Seite neu geladen wird.

Antwort

0

Ändern Sie diese Zeile:

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

zu:

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

Auch dies wahrscheinlich nicht tun, was Sie es trotzdem tun wollen. Versuchen Sie hinzuzufügen:

OnClientClick="changecolor()" 

zu Ihrem <asp:Button /> Tag.

bearbeiten An diesem Punkt bin ich ziemlich verwirrt, was genau Sie versuchen zu erreichen ...

Wenn Sie wollen einfach nur die Farbe der Rückseite Etikett ändern, ohne Entsendung Ihre <asp:Button /> zu einer Änderung normale <input type="button" /> mit einer Onclick-Handler und rufen Sie das Skript, wie folgt aus:

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

Wenn Sie die Farbe des Etiketts während Entsendung zurück, dann nur das Label ändern Hintergrund in der geändert werden soll code-behind wie folgt:

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

wie Sean bereits sagte: Am besten ist es, in diesem Fall OnClientClick zu verwenden. OnClientClick würde das Auftreten eines Postbacks verhindern - es wird dynamisch mit Javascript durchgeführt. Alles, was Sie tun müssen, ist die JavaScript-Funktion.

Ich verstehe nicht, dass Sie eine "RegisterStartupScript und RegisterClientScriptBlock" bei Farbwechsel machen wollen. Diese sollten verwendet werden, wenn Sie Javascript aus dem Code hinterher hinzufügen möchten, aber wenn Sie sehen, dass Sie es bereits in der aspx-Seite ausgeschrieben haben, ist seine Verwendung sinnlos.

0

Überprüfen Sie dies. Ich habe Ihren Code geändert und es funktioniert nun ohne Postback.

<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> 

hoffe, das hilft

Verwandte Themen