【发布时间】: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?我建议在SetAutoCompletejavascript 函数中读取客户端的值,并将其作为附加参数传递到“数据”属性中,与您设置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 没有。任何想法我做错了什么?
标签: javascript c# asp.net web-services