带有母版页的ASP.Net Web窗体中,自动完成功能不起作用
作者:互联网
我的脚本遇到了机器人问题.我有一个名为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();
}
解决方法:
您没有从.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();
标签:master-pages,asp-net,javascript,c,jquery 来源: https://codeday.me/bug/20191121/2055594.html