I'm using an AutoCompleteExtender in ASP.NET/C# to retrieve data from my database, along with the primary key of the field. When a name is chosen, the details (name/pk) are retrieved even before clicking submit, and it then passes these onto a hidden field.

The issue I have is that if the user types in an incorrect name, the pk won't reset and will remain the same from the previous search - meaning that when the user clicks search, the old data will be displayed.

Here is my AutoComplete service:

 public string[] GetAutoComplete(string prefixText, int count)

        string connection = ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString;
        string sql = "SELECT * FROM SageAccount WHERE Name LIKE @prefixText AND Customer = 1 AND SageID IS NOT NULL";
        SqlDataAdapter da = new SqlDataAdapter(sql, connection);
        da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText + "%";
        DataTable dt = new DataTable();
        List<string> Names = new List<string>();
        foreach (DataRow dr in dt.Rows)
            Names.Add(AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(dr["Name"].ToString() + " (" + dr["SageID"].ToString() + ")", dr["ID"].ToString()));

        return Names.ToArray();


And the JavaScript used for populating the hiddenfield is:

function autoCompleteItemSelected(source, eventArgs) {
            var assocHiddenField = document.getElementById(source.get_id() + '_hidden');
            assocHiddenField.value = eventArgs.get_value();

What is the best way to reset the hiddenfield if no results are returned? I do currently have a 'part working' solution, which is this bit of JavaScript:

   function pageLoad() {

    $find('txtName')._onMethodComplete = function(result, context) {

        $find('txtName')._update(context, result, false);
        webservice_callback(result, context);

function webservice_callback(result, context) {
    var hiddenfield = document.getElementById('txtName_hidden');
    if (result == "")
        hiddenfield.value = '0';

But if the user hits enter/clicks submit very quickly, it doesn't reset. If they don't click for a second or two it works, and resets the hiddenfield to 0.

Any other ideas guys?

2010/10/28 10:39
  • c#
  • autocompleteextender
  • ajax
  • 点赞
  • 收藏
  • 回答