javascriptからac#関数を呼び出す方法の例に従っています。ユーザー入力をオートコンプリートするテキストボックスを取得しました。これは、ターゲットにテキストボックスを制御させるときに機能します。つまり、ユーザーが入力している間、テキストボックスはリクエストをオートコンプリートします。
ただし、一致するケースをリストボックスに保持する必要があります。
これは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は、一致するものが見つかると自動的に完了するテキストボックスです。問題は、代わりに一致をリストボックスに追加したいということです。2番目の例は機能せず、理由がわかりません。アイテムがリストボックスに追加されません。
if (!Page.IsPostBack)
{
Textie.Attributes.Add("onblur", "javascript:CallMe('" + Textie.ClientID + "', '" + Textie.ClientID + "')");
//ListBox1.Attributes.Add("onblur", "javascript:CallMe('" + Textie.ClientID + "', '" + ListBox1.ClientID + "')");
}
ヒントをいただければ幸いです。これを解決する簡単な方法はありますか?