Я использую AutoCompleteExtender в ASP.NET/C# для извлечения данных из моей базы данных вместе с первичным ключом поля. Когда имя выбрано, детали (имя/pk) извлекаются еще до нажатия кнопки «Отправить», а затем передаются в скрытое поле.
Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь вводит неправильное имя, pk не будет сброшен и останется таким же, как при предыдущем поиске, а это означает, что когда пользователь нажимает поиск, будут отображаться старые данные.
Вот мой сервис автозаполнения:
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();
da.Fill(dt);
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();
}
И JavaScript, используемый для заполнения скрытого поля:
function autoCompleteItemSelected(source, eventArgs) {
var assocHiddenField = document.getElementById(source.get_id() + '_hidden');
assocHiddenField.value = eventArgs.get_value();
}
Каков наилучший способ сбросить скрытое поле, если результаты не возвращаются? В настоящее время у меня есть «частично работающее» решение, которое представляет собой этот фрагмент 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';
}
Но если пользователь очень быстро нажимает ввод/нажимает кнопку «Отправить», он не сбрасывается. Если они не щелкают в течение секунды или двух, это работает и сбрасывает скрытое поле на 0.
Есть еще идеи, ребята?