从 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 = $("#<%= PayerDate.ClientID %>").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 时出现意外令牌 <