如何从 asp:textbox 调用 javascript 函数?

How to call javascript function from asp:textbox?

我正在使用 textbox 从数据库中搜索项目并将它们加载到 gridview

我在 gridview 上使用 custom paging 每页只显示 25 条记录

我发现 java script 用于在客户端搜索记录

script>
        function filter2(phrase, _id) {
            var words = phrase.value.toLowerCase().split(" ");
            var table = document.getElementById(_id);
            var ele;
            for (var r = 1; r < table.rows.length; r++) {
                ele = table.rows[r].innerHTML.replace(/<[^>]+>/g, "");
                var displayStyle = 'none';
                for (var i = 0; i < words.length; i++) {
                    if (ele.toLowerCase().indexOf(words[i]) >= 0)
                        displayStyle = '';
                    else {
                        displayStyle = 'none';
                        break;
                    }
                }
                table.rows[r].style.display = displayStyle;
            }
        }

    </script>

并将其称为:

<input name="txtTerm" onkeyup="filter2(this, '<%=GridView1.ClientID %>')" placeholder="Search" type="text"/>

此功能从激活页面搜索记录,显然从整个数据库搜索将在服务器端完成,我使用 asp textbox

但我需要 onkeyup="filter2(this, '<%=GridView1.ClientID %>')"我的 asp textbox 事件

 <asp:TextBox ID="txtSearch" onkeyup="filter2(this, '<%=GridView1.ClientID %>')"  placeholder="Search" runat="server"  AutoPostBack="True" OnTextChanged="txtSearch_TextChanged" />

但是 asp 不允许我这样做..

我需要你的帮助才能做到这一点。

提前致谢。

编辑:

我需要同时搜索(客户端、服务器端)textbox 因为

客户端允许从加载的 gridview 页面进行搜索,

服务器端允许在单击时从数据库中搜索

您可以通过隐藏代码添加渲染输入控件的客户端属性:

protected void Page_Load(object sender, EventArgs e)
{

    txtSearch.Attributes.Add("onkeyup", string.Format("filter2(this,'{0}')",GridView1.ClientID)");
}

编辑:

在@Lukas 的正确评论之后,我们应该说主要问题是在文本框 webcontrol 中使用 <%=GridView1.ClientID %> 内联表达式:

<%= %> 会将字符串直接写入响应流,这发生在构建服务器控件之后,因此将呈现为字符串而不进行解析。

例如:

<asp:Label runat="server" ID="label">test</asp:Label>
    <asp:TextBox runat="server" ID="txt" Text="<%# label.ID %>" onkeyup="alert('<%: label.ID %>')"></asp:TextBox>

这是我们的输出: