Javascript 从Web服务(asmx)页面引用asp.net页面上的字段
我正在使用Web服务页面使文本框成为自动完成控件。为了做到这一点,我使用了一个web服务 我在web服务中的代码如下所示:Javascript 从Web服务(asmx)页面引用asp.net页面上的字段,javascript,c#,asp.net,web-services,Javascript,C#,Asp.net,Web Services,我正在使用Web服务页面使文本框成为自动完成控件。为了做到这一点,我使用了一个web服务 我在web服务中的代码如下所示: public string[] ISGetCompletionList(string prefixText) { string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["CLTDPL"].ConnectionString;
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();
}
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
});
};
我想知道如何在我的aspx页面上引用该字段
发送所有信息的javascript如下所示:
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();
}
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
});
};
不记得是否可以执行此操作,但请尝试向方法中添加另一个参数
public string[] ISGetCompletionList(string prefixText, string payerDate)
然后在ajax调用中
data: "{ 'prefixText': '" + request.term + "', 'payerDate': '" + formDate + "' }", etc.
或者
在ajax调用中向prefixText添加信息,类似于webmethod组合数据的方式:
data: "{ 'prefixText': '" + request.term + "|" + formDate + "' }", etc
然后将其拆分成代码。您是指MyForm.PayerDate?我建议在客户端读取SetAutoComplete javascript函数中的值,并将其作为“data”属性中的附加参数传递,也就是您在其中设置prefixText的参数?Javascript是我的薄弱环节,它是我实现自动完成的奇迹。该表单上还有一个名为txtDate.get的文本框,其值为:var payerdate=$.val;。然后将其传递给以下对象:数据:{'prefixText':'+request.term+','payerDate':payerDate}。我想是约会吧?然后使用字符串传输原始值,然后使用DateTime.TryParse将其发送到服务器端。为@payerdate使用命令参数,就像您对@SearchText所做的那样。我将var语句滑入函数SetAutoComplete{line下面的一行,得到了一个无效的JSON原语:payerdate错误。我将数据行稍微编辑为数据:{'prefixText':'+request.term+','payerdate':'+payerdate+}它是有效的,但在后端,当我在其中插入代码中断时,它的prefixText有一个值,payerDate没有。你知道我做错了什么吗?看到第一个方法有效了吗,所以我不必费心测试第二个。谢谢!