从Web服务(asmx)页面引用asp.net页面上的字段

时间:2018-01-14 20:04:35

标签: javascript c# asp.net web-services

我正在使用Web服务页面将文本框设置为"自动完成"控制。为此,我使用了网络服务。

我在Web服务中的代码如下所示:

    public string[] ISGetCompletionList(string prefixText)
    {
        string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["CLTDPL"].ConnectionString;
        SqlConnection conn = new SqlConnection(connectionString);

        List<string> Payers = new List<string>();
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "SELECT [PAYER_ID], [PAYER_TYPE] FROM [mos_Payer] WHERE " +
            "PAYER_TYPE like '%' + @SearchText + '%' ORDER BY PAYER_TYPE ASC";
            cmd.Parameters.AddWithValue("@SearchText", prefixText);
            cmd.Connection = conn;
            conn.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                while (sdr.Read())
                {
                    Payers.Add(string.Format("{0}|{1}", sdr["PAYER_TYPE"], sdr["PAYER_ID"]));
                }
            }
            conn.Close();
        }
        return Payers.ToArray();
    }

一切都很完美。但是,现在我需要通过其中一个字段过滤CommandText。所以,我知道我需要将cmd.CommandText行改为:

cmd.CommandText = "SELECT [PAYER_ID], [PAYER_TYPE] FROM [mos_Payer] WHERE " +
"PAYER_TYPE like '%' + @SearchText + '%' and PAYER_DATE = " + MyForm.PayerDate + 
" ORDER BY PAYER_TYPE ASC";

我试图弄明白我如何在我的aspx页面上引用该字段。

发送所有信息的javascript如下所示:

    function SetAutoComplete() {
        $("#<%=txtPayer.ClientID %>").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: '<%=ResolveUrl("~/Autocomplete.asmx/ISGetCompletionList") %>',
                     data: "{ 'prefixText': '" + request.term + "'}",
                     dataType: "json",
                     type: "POST",
                     contentType: "application/json; charset=utf-8",
                     success: function (data) {
                         response($.map(data.d, function (item) {
                             return {
                                 label: item.split('|')[0],
                                 val: item.split('|')[1]
                             }
                         }))
                     },
                     error: function (response) {
                         alert(response.responseText);
                     },
                     failure: function (response) {
                         alert(response.responseText);
                     }
                 });
             },
            select: function (e, i) {
                $("#<%=hfPayer.ClientID %>").val(i.item.val);
             },
             minLength: 1
        });
   };

1 个答案:

答案 0 :(得分:1)

不记得你是否可以这样做,但是尝试在你的方法中添加另一个参数。

public string[] ISGetCompletionList(string prefixText, string payerDate)

然后在ajax调用中

data: "{ 'prefixText': '" + request.term + "', 'payerDate': '" + formDate + "' }", etc.

,或者

在ajax调用中将信息添加到prefixText,类似于web方法组合数据的方式:

data: "{ 'prefixText': '" + request.term + "|" + formDate + "' }", etc

然后将其拆分为代码。