Javascript 自动完成在 ascx 中不起作用

Javascript autocomplete not working in ascx

我在 ascx 文件的网格视图中有自动完成功能,但自动完成功能在 ascx 文件中不起作用。我在其他有效的页面中制作了几个类似的自动完成功能。为什么自动完成功能在我的 ascx 文件中不起作用。我有一个假设,为什么它不起作用,但我不确定如何在这里修复它

我认为问题出在 javascript

中的以下 url
      url: "contratoGerencia.aspx/getSupplierAndComponente"

但是我不知道我应该如何改变它不要让它与 ascx 一起工作 file.Also 我在这里找到了一个解决方案 https://www.codeproject.com/Questions/757769/How-to-Call-Ascx-page-form-JavaScript-Funnction-Of 这几乎是我想要的唯一的问题是我也在我的情况下有一个文本框。 任何帮助将不胜感激。希望以下信息对您有所帮助。

这是我的 ascx (ComponentesControler.ascx) 代码

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <link href="../css/autocomplete.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js"></script>
    <script type="text/javascript" src="../scripts/autocomplete.js" ></script>
    <asp:TextBox CssClass="gridContractAndComponente" ID="txtContractComponenteFooter" Text="" runat="server" TextMode="MultiLine" Rows="1" />

这是我的 ascx.cs (ComponentesControler.ascx.cs) 代码

   [WebMethod]
        public static List<string> getSupplierAndComponente(string prefixText)
        {
            string lv_numero_contrato;
            List<string> numeros_contrato = new List<string>();
            connectionStringBuilder builder = new connectionStringBuilder();
            String connString;
            connString = builder.builder.ConnectionString;

            string selectStatement = " SELECT numero_contrato FROM erp_contratos ";


            using (MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connString))
            {
                conn.Open();
                using (MySqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = selectStatement;
                    cmd.Parameters.AddWithValue("@searchText", prefixText);
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            lv_numero_contrato = reader.GetString(reader.GetOrdinal("numero_contrato"));
                            numeros_contrato.Add(lv_numero_contrato);
                        }
                    }
                    conn.Close();
                }
            }
            return numeros_contrato;
        }

这是我使用 ascx 文件时的 aspx 页面 (contratoGerencia.aspx)

  <div id="ComponentesSection" class="menusection">         
        <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Always" >
      <ContentTemplate>                   
    <TWebControl5:WebControl5 ID="Header8" runat="server" />                   
    </ContentTemplate>  
   </asp:UpdatePanel>
  </div>

这是我的 javascript 文件 (autocomplete.js)

$(document).ready(function () {
    SearchSupplierAndComponente();
});
function SearchSupplierAndComponente() {
    $(".gridContractAndComponente").autocomplete({
        source: function (request, response) {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "contratoGerencia.aspx/getSupplierAndComponente",
                data: "{'containedText':'" + document.getElementById('PageContent_gvPrimaryGrid_txtContractComponenteFooter').value + "'}",
                dataType: "json",
                success: function (data) {
                    response(data.d);
                },
                error: function (result) {
                    alert("Error");
                }
            });
        }
    });
}

问题可能由 UpdatePanel 触发,如下所述: jQuery $(document).ready and UpdatePanels?

所以像这样修改你的autocomplete.js:

$(document).ready(function() {
    SearchSupplierAndComponente();
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function() {
    SearchSupplierAndComponente();
});



function SearchSupplierAndComponente() {
    $(".gridContractAndComponente").autocomplete({
        source: function (request, response) {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "contratoGerencia.aspx/getSupplierAndComponente",
                data: "{'containedText':'" + document.getElementById('PageContent_gvPrimaryGrid_txtContractComponenteFooter').value + "'}",
                dataType: "json",
                success: function (data) {
                    response(data.d);
                },
                error: function (result) {
                    alert("Error");
                }
            });
        }
    });
}

查看控制台错误是否消失。

问题出在您在 AJAX 中输入的参数名称中,您的方法需要接收一个名为 prefixText 的参数,而不是 containedText.

改变

data: {'containedText':'" + document.getElementById('PageContent_gvPrimaryGrid_txtContractComponenteFooter').value + "'}

data: {'prefixText':'" + document.getElementById('PageContent_gvPrimaryGrid_txtContractComponenteFooter').value + "'}