0

我正在使用 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#

更新:

在处理了一段时间后,我确定您不能<%%>在 ASP 控件中使用标记。此外,如果您正在寻找控制值的动态评估 AVOID AVOID AVOID using<%=someControl.Text%>或类似的构造,因为它们仅在将请求提交到服务器后才被评估。如果您在运行时需要来自另一个控件的静态值,只需在页面加载事件中设置该值或在后面的代码中以另一种方式处理它。

4

2 回答 2

2

Javacript will search for variable name = txtToSay.Text在 saySomething 函数调用中,将引号括起来使其成为字符串值

改变

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

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

您可以不通过这种方式获得 txtToSay.Text

<script type="text/javascript">
    function saySomething(txt){
        alert(document.getElementById('<%=txtToSay.Text%>').value);
    };
</script>
于 2012-11-21T16:43:14.743 回答
1

您需要'saySomething()通话中添加文字。

像这样:

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

更新

<%= %>不能在 asp.net 控件中工作。您可以从代码隐藏中设置它吗?

IE

btnSaySomething1.OnClientClick = "Text to say"
于 2012-11-21T16:42:56.073 回答