首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoCompleteExtender问题

AutoCompleteExtender问题
EN

Stack Overflow用户
提问于 2010-10-28 18:39:44
回答 2查看 2.4K关注 0票数 0

我使用ASP.NET/C#中的AutoCompleteExtender从我的数据库中检索数据,以及字段的主键。选择名称后,甚至在单击submit之前就会检索详细信息( name /pk),然后将这些信息传递到隐藏字段中。

我的问题是,如果用户输入了错误的名称,pk将不会重置,并将与上一次搜索保持相同-这意味着当用户单击搜索时,将显示旧数据。

下面是我的AutoComplete服务:

代码语言:javascript
复制
 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为:

代码语言:javascript
复制
function autoCompleteItemSelected(source, eventArgs) {
            var assocHiddenField = document.getElementById(source.get_id() + '_hidden');
            assocHiddenField.value = eventArgs.get_value();
        }

如果没有返回结果,重置隐藏字段的最好方法是什么?我目前确实有一个“部分工作”的解决方案,那就是这一点JavaScript:

代码语言: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';
}

但是,如果用户快速点击enter/单击submit,它就不会重置。如果它们没有单击一两秒,它就会起作用,并将隐藏字段重置为0。

还有其他想法吗伙计们?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-28 18:46:45

尝试使用$addHandler附加到文本框的keypress事件。清除该事件处理程序中的隐藏字段:

代码语言:javascript
复制
$addHandler($get("txtName"), "keypress", function(e) {
    $get("txtName_hidden").value = "";
}, true);
票数 0
EN

Stack Overflow用户

发布于 2012-02-20 15:23:39

您可以将AJAX自动完成扩展器的OnClientPopulating属性设置为清除隐藏字段的JS。

代码语言:javascript
复制
function ClearHidden(source, eventArgs) {
        document.getElementById('<%=this.hdnUsrIdSel.ClientID%>').value = null;
}

<ajaxToolkit:AutoCompleteExtender ID="autoCompleteExtend" runat="server" 
        MinimumPrefixLength="1" ServiceMethod="GetCompletionList" 
        FirstRowSelected="true" 
        ServicePath="~/WebServices/Autocomplete.asmx" TargetControlID="txtUsers" 
        UseContextKey="True" CompletionSetCount ="10" 
        OnClientPopulating="ClearHidden" 
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4042034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档