【问题标题】:Autocomplete does not work in ASP.Net webform with masterpage自动完成在带有母版页的 ASP.Net 网络表单中不起作用
【发布时间】:2026-01-15 18:15:02
【问题描述】:

我的脚本遇到了机器人问题。我有一个名为 CoursesPage.aspx 的 Web 表单,它有一个母版页。 我在从数据库中获取课程名称的文本框上使用了 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>

我放了警报(“我很好”);只是为了看看脚本是否会触发,事实证明确实如此。所以文件没有问题。但其余的没有。

这是后面的代码:

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();
    }

【问题讨论】:

    标签: c# javascript jquery asp.net master-pages


    【解决方案1】:

    您没有提供 .aspx 代码中的标记。但很可能由于 ClientIdMode 为您的 TextBox 生成的 ID 不同。如果您不确定,可以查看为您的页面生成的 HTML。

    您应该将 TextBox 的 ClientIdMode 设置为静态。那么客户端的ID就是“txtName”。

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

    有关详细信息,请参阅MSDN ASP.NET Web Server Control Identification


    您可以使用 web.config 中的单个设置为所有页面上的所有控件设置 ClientIdMode。

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

    我得到了这个here的方向。


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

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

    【讨论】:

    • 是的!有效!!天哪,我整个晚上都在这上面度过。谢谢先生。
    【解决方案2】:

    尝试:

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

    您的 TextBox 的 id 可能会用 ContentPlaceHolderID 标识,后跟“_”和您的 TextBox id。尝试使用 Chrome isspector 并查看您的 TextBox 识别的 id

    【讨论】: