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

Posted

技术标签:

【中文标题】从 Web 服务 (asmx) 页面引用 asp.net 页面上的字段【英文标题】:Referencing a field on an asp.net page from a Web Service (asmx) page 【发布时间】:2018-06-23 12:49:10 【问题描述】:

我正在使用 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
        );
   ;

【问题讨论】:

你的意思是MyForm.PayerDate?我建议在 SetAutoComplete javascript 函数中读取客户端的值,并将其作为附加参数传递到“数据”属性中,与您设置 prefixText 的位置相同。 那么我如何将 2 个值添加到该“数据:”参数? Javascript 是我的薄弱环节,让自动完成功能正常工作简直是个奇迹。该表单上有另一个名为 txtDate 的文本框。 获取值:var payerdate = $("#&lt;%= PayerDate.ClientID %&gt;").val();。然后传递它:data: " 'prefixText': '" + request.term + "', 'payerDate': payerdate "。我想这是约会?然后使用字符串传输原始值,并在服务器端使用DateTime.TryParse。就像使用 @SearchText 一样,为 @payerdate 使用命令参数。 我将“var”语句作为“function SetAutoComplete() ”行下方的行滑入,我收到“无效的 JSON 原语:payerdate”错误。我将数据行稍微编辑为 data: " 'prefixText': '" + request.term + "', 'payerDate': '" + payerdate + "' " 并且它有效,但是当我在后端放置一个其中的代码中断具有prefixText 的值,但payerDate 没有。任何想法我做错了什么? 见this thread 【参考方案1】:

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

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

然后在ajax调用中

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

或者,

将信息添加到ajax调用中的prefixText,类似于webmethod如何组合数据:

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

然后将其拆分为后面的代码。

【讨论】:

第一种方法有效,所以我没有费心测试第二种方法。谢谢!

以上是关于从 Web 服务 (asmx) 页面引用 asp.net 页面上的字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jQuery调用带有参数的asp.net asmx web服务来获取响应

asp.net asmx Web 服务返回 xml 而不是 json

通过 JSON 对象将 Session 对象中的字节数组传递给 Web 服务(Asp.Net 2.0 asmx)

使用 ajax() 和 jsonp 调用 asp.net 远程 Web 服务 .asmx 时出现意外令牌 <

我有一个 asp.net .asmx Web 服务,我需要返回最接近查询 Web 服务的客户端的地址列表

ASP.net Webservice *.asmx 访问与 WCF 服务参考