无法获取document.GetElementById正常工作

时间:2012-09-12 09:07:09

标签: javascript asp.net updatepanel

我试图从asp服务器按钮的onClick事件调用javascript函数。我在更新面板中有此按钮和标签。

在aspx中:

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
       <ContentTemplate>
         <asp:Button ID="Button1" runat="server" 
            style="z-index: 1; left: 49px; top: 119px; position: absolute; height: 26px;" Text="Button" 
            onclick="Button1_Click"/>
         <asp:Label ID="Label1" runat="server" Text="l1" 
            style="position:absolute; top: 123px; left: 127px;"></asp:Label>
       </ContentTemplate>
    </asp:UpdatePanel>

代码背后:

protected void Button1_Click(object sender, EventArgs e)
{
   ScriptManager.RegisterClientScriptBlock(this, typeof(Button), "me", "me()", true);
}

aspx中的Javascript:

<script type="text/javascript">
function me()
{
   document.getElementById('<%= Label1.ClientID %>').value="clicked";
}
</script>

我想要做的就是点击按钮点击标签的值应该更改为'clicked',这不会发生,并且在firebug中也没有错误。我在哪里错了()?

P.S:我这样做是为了学习从后面的代码调用javascript函数。因此,对代码的任何优化也是受欢迎的。 (我实际上有很多代码要在JS函数中实现,所以请提供相应的建议)

1 个答案:

答案 0 :(得分:5)

据我记得,Label控件呈现为<div><span>(不能完全记住),而不是文本输入字段。因此,您应该将innerHTML属性设置为value

document.getElementById('<%= Label1.ClientID %>').innerHTML = 'clicked';

或者只是在服务器端执行,而不是注册客户端回调:

protected void Button1_Click(object sender, EventArgs e)
{
   Label1.Text = "clicked";
}

更新:

根据评论部分的要求,您可以将参数传递给来自服务器的客户端回调:

protected void Button1_Click(object sender, EventArgs e)
{
    string param1 = ...
    double param2 = ...
    int param3 = ...
    var serializer = new JavaScriptSerializer();

    ScriptManager.RegisterClientScriptBlock(
        this, 
        typeof(Button), 
        "me", 
        string.Format("me({0})", serializer.Serialize(new { param1 = param1, param2 = param2, param3 = param3 })), 
        true
    );
}

和你的回调:

function me(values) {
    // you could use values.param1, values.param2, values.param3, ... here
}