为什么标签不使用RegisterClientScriptBlock改变颜色?

时间:2009-03-20 16:28:20

标签: c# asp.net javascript

我的aspx页面定义如下:

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

这是btnPostBack2点击事件:

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

即使我将脚本放在一个函数中来改变颜色,它仍然没有这样做,如果函数已经包含在脚本标记中,为什么我需要将脚本标记添加到true?

lblDisplayDate位于Page Load中,在每次页面重新加载时将其设置为当前时间。

3 个答案:

答案 0 :(得分:0)

更改此行:

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

为:

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

此外,这可能不是你想要它做的事情。尝试添加:

OnClientClick="changecolor()"

到您的<asp:Button />代码。

编辑此时我对你究竟想要完成的事情感到很困惑......

如果您只想更改标签的颜色而不回复,请使用onclick处理程序将<asp:Button />更改为正常<input type="button" />并调用您的脚本,如下所示:

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

如果您想在回发时更改标签的颜色,那么只需在代码隐藏中更改标签的背景,如下所示:

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

答案 1 :(得分:0)

像肖恩已经说过的那样:在这种情况下最好使用OnClientClick。 OnClientClick会阻止回发 - 它是使用javascript动态完成的。你需要做的就是优先于javascript函数。

我不明白你想在颜色变化上做“RegisterStartupScript和RegisterClientScriptBlock”。当你想从后面的代码中添加javascript时应该使用这些,但是看到你已经在aspx页面中写出了它,它的使用毫无意义。

答案 2 :(得分:0)

检查一下。我已经修改了你的代码并且它现在正常工作,没有回发。

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

希望这会有所帮助