AutoCompleteExtender详细介绍(二)

        上篇文件介绍了AutoCompleteExtender控件的基本用法,此篇文件对AutoCompleteExtender进行更深入了介绍。


1. AutoCompleteExtender传递自定义参数

        AutoCompleteExtender控件搜索方法默认的传递参数是关联的textbox控件中输入的值,而有的时候输入的值无法准确的定位到匹配信息,这时就需要传递额外的参数,以帮助定位。

        上篇文章中说过,AutoCompleteExtender搜索函数有两种方式重载:

public string[] ServiceMethod (string prefixText, int count);
public string[] ServiceMethod (string prefixText, int count,string contextKey);

        第一种形式是不包含自定义参数的,第二中形式就是包含自定义参数的,所有的自定义参数都可以通过第二个方法的第三个参数进行传递。

        参数传递的动作发生在textbox控件输入后,所以要传递额外的参数需要处理textbox控件按键事件。

<asp:TextBox ID="txtProduct" runat="server" Width="180px" Height="25px" οnkeydοwn="return OnTxtProductKeyDown();" ></asp:TextBox>

        为textbox控件定义onkeydown处理函数,这是一个javascript函数,定义如下:

function OnTxtProductKeyDown()
    {
        var acNameClientId="<%=actProduct.ClientID %>";                // 获取autocompleteextender控件ID
        var acName= $find(acNameClientId);                             // 查找autocompleteexteder控件
        if(acName!=null)
            acName.set_contextKey("<%=cidCurrent %>");                // 设置autocompleteextender控件的额外参数
    }

        可以看到,关键在acName.set_contextKey()这句,在每次textbox的onkeydown事件中调用这个方法,设置额外参数,从而给web服务方法传递额外参数。


2. 触发选择事件

        AutoCompleteExtender控件在选择某项后,会触发指定事件,从而完成某些个性化处理。为AutoCompleteExtender控件添加选择事件很简单。

<cc1:AutoCompleteExtender ID="actProduct" runat="server" ServicePath="SelectBaseInfo.asmx"
TargetControlID="txtProduct" ServiceMethod="GetProductInfo" MinimumPrefixLength="1" CompletionInterval="100" 
CompletionListCssClass="autocomplete_completionListElement" CompletionListItemCssClass="autocomplete_listItem" 
CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" 
OnClientItemSelected="OnAceProductItemSelected"            // 关联选择事件
>
</cc1:AutoCompleteExtender>

        注意,关联的选择事件是一个javascript函数,可以在函数中进行自定义处理,如下样例:

function OnAceProductItemSelected(source, eventArgs)
    {
        var result = eventArgs.get_value();
        var lblIDClientId = "<%=lblProductID.ClientID %>"
        var lblID = document.getElementById(lblIDClientId);
        if(lblID !=null)
            lblID.value = result.split(',')[2];

        var lblNameClientId = "<%=txtProduct.ClientID %>"
        var lblName = document.getElementById(lblNameClientId);
        if(lblName!=null)
            lblName.value=result.split(',')[0];
    }

        其中eventArgs.get_value()用来获取选择的内容。上javascript函数的作用是,把返回的内容进行分割,将分割的值存储到不同的控件中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值