Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery自动完成不调用ASP.NET中的文本框_Javascript_Jquery_Asp.net_Autocomplete_Textbox - Fatal编程技术网

Javascript jQuery自动完成不调用ASP.NET中的文本框

Javascript jQuery自动完成不调用ASP.NET中的文本框,javascript,jquery,asp.net,autocomplete,textbox,Javascript,Jquery,Asp.net,Autocomplete,Textbox,我正在尝试在别人编写的asp.net项目中使用jquery自动完成脚本。虽然我可以在一个单独的项目中运行它,但在我提到的项目中实现它时,它没有任何作用。它们都在.NET4.0框架上。页面的html代码如下所示: <%@ Page Title="" Language="C#" MasterPageFile="~/site.master" AutoEventWireup="true" CodeFile="Meslek.aspx.cs" Inherits="AutoComplete.Script

我正在尝试在别人编写的asp.net项目中使用jquery自动完成脚本。虽然我可以在一个单独的项目中运行它,但在我提到的项目中实现它时,它没有任何作用。它们都在.NET4.0框架上。页面的html代码如下所示:

<%@ Page Title="" Language="C#" MasterPageFile="~/site.master" AutoEventWireup="true" CodeFile="Meslek.aspx.cs" Inherits="AutoComplete.Scripts_Meslek" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<script language="javascript"  type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>  
<script language="javascript"  type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script> 
<script language="javascript"  type="text/javascript">
    $(document).ready(function () {
        $("#ContentPlaceHolder1_txtCountry").autocomplete({
            source: function (request, response) {
                var param = { keyword: $('#ContentPlaceHolder1_txtCountry').val() };
                $.ajax({
                    url: "Meslek.aspx/GetCountryNames",
                    data: JSON.stringify(param),
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {
                        response($.map(data.d, function (item) {
                            return {
                                value: item
                            }
                        }))
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            },
            minLength: 1
        });
    });


</script>  
<div>
   <asp:TextBox ID="txtCountry" runat="server"></asp:TextBox>
   <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
 </div>
 <br />
</asp:Content>
我认为问题是下面这一行应该调用函数从代码隐藏中检索自动完成单词,但是无论我在文本框中输入什么,都不会发生任何事情

$ContentPlaceholder 1\u txtCountry.autocomplete{

我知道代码是有效的,因为我在不同的项目中使用它,但是当我在这个项目中实现它时,我什么都没有得到。我知道从代码背后返回的列表是有效的,如果我可以在那里调用函数,我肯定我会检索结果

所以问题是,这可能是什么原因?这是由某些项目属性引起的,是由母版页引起的,是我调用函数的代码错误还是其他原因

Meslek.aspx中的完整代码如下所示

using System;
using System.Collections.Generic;
//using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Data.SqlClient;
using System.Web.Configuration;

namespace AutoComplete
{
    public partial class Scripts_Meslek : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        public static string[] GetCountryNames(string keyword)
        {
            List<string> country = new List<string>();
            //string query = string.Format("SELECT DISTINCT Country FROM Customers WHERE Country LIKE '%{0}%'", keyword);
            string query = string.Format("SELECT mslk FROM meslek WHERE mslk LIKE '%{0}%'", keyword);

            using (SqlConnection con =
                //new SqlConnection("Data Source=KMISBPRDSQL001; Database=SIRIUS; Initial Catalog=SIRIUS; Trusted_Connection=True; "))
                    new SqlConnection(WebConfigurationManager.ConnectionStrings["SIRIUS"].ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand(query, con))
                {
                    con.Open();
                    SqlDataReader reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        country.Add(reader.GetString(0));
                    }
                }
            }

            return country.ToArray();
        }
    }
}
我建议使用以下方法:

使用功能:

function CompleteText() {
      $(document).ready(function () {
    $(".Country").autocomplete({
        source: function (request, response) {
            var param = { keyword: $('.Country').val() };
            $.ajax({
                url: "Meslek.aspx/GetCountryNames",
                data: JSON.stringify(param),
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataFilter: function (data) { return data; },
                success: function (data) {
                    response($.map(data.d, function (item) {
                        return {
                            value: item
                        }
                    }))
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus);
                }
            });
        },
        minLength: 1
    });
   });
}
在文本框中:

 <asp:TextBox ID="txtCountry" onfocus="CompleteText()" runat="server"   class="Country" Width="298px"></asp:TextBox>

我找到了解决方案并想在这里分享。这只是一个字母和一个点造成的。只是将data.d更改为data,就是这样。data.d返回未定义的值,而data显示了所有值。因此,该项目与.d不兼容,无法显示我猜的值。