0

我正在尝试从 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>

我要做的就是在按钮上单击标签的值应更改为“单击”,这不会发生,并且在萤火虫中也没有错误。我在哪里错了()?

PS:我这样做是为了学习从后面的代码中调用 javascript 函数。因此,也欢迎对代码进行任何优化。(其实我后面有很多代码要在JS函数中实现,所以请适当的建议)

4

1 回答 1

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
}
于 2012-09-12T09:10:11.323 回答