OnClientClick不在ASP.NET中工作

时间:2012-11-21 16:41:56

标签: javascript asp.net javascript-events client-side

我正在使用ASP.NET将值传递给JavaScript函数,由于某些原因我无法确定,当我尝试从另一个控件传入值时,它无法正常工作。相反,它的行为就像存在语法错误,它只是提交回主窗体。

有谁知道为什么?

示例:

<asp:TextBox ID="txtToSay" runat="server" Text="Something"></asp:TextBox>

<asp:Button runat="server" ID="btnSaySomething1" Text="Say Something"
OnClientClick="saySomething(<%=txtToSay.Text%>);"  /> <!-- doesn't work -->

<asp:Button runat="server" ID="btnSaySomething1" Text="Say Something"
OnClientClick="saySomething('<%=txtToSay.Text%>');"  /> <!-- doesn't work -->

<asp:Button runat="server" ID="btnSaySomething2" Text="Say Something"
OnClientClick="saySomething('Something');"  /> <!-- works -->

<script type="text/javascript">
    function saySomething(txt){
        alert(txt);
    };
</script>

其他信息:

在.NET 4.0上运行的Web应用程序 语言:C#

更新

使用了一段时间后,我确定你不能使用&lt; %%&gt; ASP控件中的标签。此外,如果您正在寻找动态评估控制值,请使用<%=someControl.Text%>或类似结构避免避免,因为只有在将请求提交给服务器后才会对其进行评估。如果在运行时需要来自另一个控件的静态值,只需在页面加载事件中设置该值,或者在后面的代码中以另一种方式处理它。

2 个答案:

答案 0 :(得分:2)

saySomething函数调用中的

Javacript will search for variable name = txtToSay.Text,在它周围加上引号使其成为字符串值

更改

OnClientClick="saySomething(<%=txtToSay.Text%>);" 

OnClientClick="saySomething('<%=txtToSay.Text%>');" 

你可以不用这样的方式获取txtToSay.Text

<script type="text/javascript">
    function saySomething(txt){
        alert(document.getElementById('<%=txtToSay.Text%>').value);
    };
</script>

答案 1 :(得分:1)

您需要在'来电中将saySomething()放在您的文字周围。

像这样:

    <asp:Button runat="server" ID="btnSaySomething1" Text="Say Something" OnClientClick="saySomething('<%=txtToSay.Text%>');"  />

<强>更新

<%= %>无法在asp.net控件中运行。你能从代码隐藏中设置它吗?

I.E

btnSaySomething1.OnClientClick = "Text to say"