我正在关注如何从javascript调用c#函数的示例。我有一个文本框应该自动完成用户输入。这在我将目标控件设置为文本框时有效,这意味着当用户键入文本框时,将自动完成请求。
但是,我想要一个列表框来保存匹配的案例。
这是javascript代码:
function CallMe(src, dest) {
var ctrl = document.getElementById(src);
// call server side method
PageMethods.GetNews(ctrl.value, CallSuccess, CallFailed, dest);
}
function CallSuccess(res, destCtrl) {
var dest = document.getElementById(destCtrl);
dest.value = res;
}
function CallFailed(res, destCtrl) {
alert(res.get_message());
}
下面是c#代码,它接受一个字符串输入并返回与输入匹配的条目。 我已经通过使用遍历列表的foreach循环并将项目添加到列表框中进行了测试,我需要以ajax方式/样式执行此操作。
但是我希望通过使用javascript不断更新。
[System.Web.Services.WebMethod]
public static List<string> GetNews(string input)
{
List<string> listan = new List<string>();
SqlDataReader reader;
string tempstr = "";
if (input == null || input.Length == 0)
return null;
SqlConnection conn = null;
try
{
string connection = "example";
conn = new SqlConnection(connection);
string sql2 = "Select News from Nyheter where News LIKE '%'+@News+'%'";
SqlCommand cmd = new SqlCommand(sql2, conn);
cmd.Parameters.AddWithValue("News", input);
conn.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
tempstr = (string)reader["News"];
listan.Add(tempstr);
}
return listan;
}
catch (SqlException ex)
{
return null;
}
finally
{
conn.Close();
}
}
这是加载代码,第一个示例有效,Textie是一个文本框,在找到匹配项时自动完成。问题是我希望将匹配添加到列表框中。第二个例子不起作用,我无法弄清楚为什么,这些项目没有被添加到列表框中。
if (!Page.IsPostBack)
{
Textie.Attributes.Add("onblur", "javascript:CallMe('" + Textie.ClientID + "', '" + Textie.ClientID + "')");
//ListBox1.Attributes.Add("onblur", "javascript:CallMe('" + Textie.ClientID + "', '" + ListBox1.ClientID + "')");
}
提示将不胜感激,是否有更简单的方法来解决这个问题?
答案 0 :(得分:0)
Textie.Attributes.Add("onblur", "javascript:CallMe('" + Textie.ClientID + "', '" + Textie.ClientID + "')");
将此代码放入页面加载但不包含在“NOt postback”代码中。