自动填充功能在带有母版页的ASP.Net webform中不起作用

时间:2014-03-26 18:22:57

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

我的脚本出现了机器人故障。我有一个名为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>

我提醒(&#34;我很好&#34;);只是为了查看脚本是否触发,事实证明它确实如此。所以这些文件没问题。但其余的并不是。

这是背后的代码:

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

2 个答案:

答案 0 :(得分:3)

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

您应该做的是将TextBox的ClientIdMode设置为Static。然后客户端的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();

答案 1 :(得分:0)

尝试:

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

您的TextBox的ID可能会由ContentPlaceHolderID,后跟“ _”和您的TextBox的ID来标识。尝试使用Chrome ispector并查看您的TextBox标识的ID