自动完成在ASP中不起作用.Net网站表单与主页

Autocomplete does not work in ASP.Net webform with masterpage

本文关键字:网站 Net 表单 主页 不起作用 ASP      更新时间:2023-09-26

我有一个bot麻烦的脚本。我有一个名为CoursesPage的web表单。Aspx有一个母版页。我使用Jquery在一个文本框上使用自动完成功能,该文本框可以从数据库中获取课程名称。jQuery在没有母版页的页面上就像一个魅力,但它在这个页面上不起作用。

这是代码。

<link rel="stylesheet" href="css/jquery-ui.css" />
    <script src="js/jquery-1.8.3.js" type="text/javascript"></script>
    <script src="js/jquery-ui.js" type="text/javascript" ></script>
<script type="text/javascript">
            function LoadList() {
                alert("I'm good");
                var ds = null;
                ds = <%=listFilter %>
        $("#txtName").autocomplete({
            source: ds
        });
        }

            $(function () { LoadList(); });
   </script>

我设置alert("I'm good");看看脚本是否触发,结果是触发了。所以文件没有问题。但其余的不是。

下面的代码:

private string BindName()
    {
        DataTable dt = null;
        using (MakeConn())
        {
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "select distinct Name from courses";
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    dt = new DataTable();
                    da.Fill(dt);
                }
            }
        }
        StringBuilder output = new StringBuilder();
        output.Append("[");
        for (int i = 0; i < dt.Rows.Count; ++i)
        {
            output.Append("'"" + dt.Rows[i]["Name"].ToString() + "'"");
            if (i != (dt.Rows.Count - 1))
            {
                output.Append(",");
            }
        }
        output.Append("];");
        return output.ToString();
    }

您没有提供.aspx代码中的标记。但最有可能的ID是为您生成的文本框是不同的,由于ClientIdMode。如果不确定,可以查看生成的HTML。

你应该做的是将TextBox的ClientIdMode设置为Static。那么客户端的ID将是"txtName"。

<asp:TextBox runat="server" id="txtName" ClientIdMode="Static" />

有关更多信息,请参见MSDN ASP。. NET Web服务器控制标识。


你可以在web.config中为所有页面上的所有控件设置ClientIdMode。

<configuration>
    <system.web>
        <pages clientIDMode="Static"></pages>
    </system.web>
</configuration>

我这里有这个的路线。


另一种方法是把ASP。. NET内联为JavaScript提供ClientId。这样做的好处是,如果出于某种原因删除或重命名txtName,它将导致编译错误,而不是在运行时静默失败。

$("#<%= txtName.ClientID  %>").autocomplete();

Try with:

$("#ContentPlaceHolder1_txtName").autocomplete({
        source: ds
    });

你的文本框的id可能会被识别为ContentPlaceHolderID后面跟着"_"和你的文本框id。尝试使用Chrome检查器,看看你的TextBox标识的id