AutoCompleteExtender返回text,value

项目中遇到一个问题:有些下拉列表的项目过多,用户选择起来十分麻烦。

这使我想到了使用Ajax的AutoCompleteExtender控件替代DropDownList来解决这个问题。但是标准的AutoCompleteExtender控件只返回Text列表,我如何取得用户选择的ID呢?

网络上有些做法是改变AutoCompleteExtender的某些内部函数(http://www.cnblogs.com/SilverLight/archive/2008/09/28/1301755.html),但实现起来相当麻烦。最后我采用了一种变通的方法解决了此问题。其思路如下:通过AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem函数设置text-value键值对,然后使用AutoCompleteExtender控件的OnClientItemSelected方法将选中项的value值存入页面中的hidden控件。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ytc_1224/archive/2009/04/01/4040801.aspx

HTML代码如下: 

<asp:TextBox ID= "MaterialNameTxt" runat= "server" Width= "350px" ></asp:TextBox>  
   
<cc2:AutoCompleteExtender ID= "AutoCompExt" runat= "server"
TargetControlID= "MaterialNameTxt" MinimumPrefixLength= "1"
ServicePath= "http://www.cnblogs.com/../MyWebMethods/WSMSCMap_GetMaterial.asmx"
ServiceMethod= "GetListName" CompletionInterval= "1"
CompletionListItemCssClass= "autocomplete_listItem"
CompletionListHighlightedItemCssClass= "autocomplete_highlightedListItem"
FirstRowSelected= "true" Enabled= "true" EnableCaching= "false"
CompletionListCssClass= "autocomplete_list" UseContextKey= "true"
OnClientItemSelected= "OnACEItemSelected" ></cc2:AutoCompleteExtender>  
   
<input id= "AutoComplete_Hidden" type= "hidden" runat= "server" />
 
本文来自CSDN博客,转载请标明出处:http: //blog.csdn.net/ytc_1224/archive/2009/04/01/4040801.aspx

 JavaScript:

<mce:script type= "text/javascript" ><!--  
         function OnACEItemSelected(source, eventArgs) {  
             document.getElementById( "AutoComplete_Hidden" ).value=eventArgs.get_value();  
             document.getElementById( "MaterialIDLbl2" ).innerText=eventArgs.get_value();  
             //alert("Value值:"+eventArgs.get_value()+"\nText值:"+eventArgs.get_text());  
         }  
// --></mce:script> 
 
 
本文来自CSDN博客,转载请标明出处:http: //blog.csdn.net/ytc_1224/archive/2009/04/01/4040801.aspx

CS代码:

/// <summary>  
/// AutoCompleteExtender搜索显示结果集的ServiceMethod  
/// </summary>  
/// <param name="prefixText">输入的文本,根据这个和数据库进行匹配</param>  
/// <param name="count">返回的结果集的长度</param>  
/// <param name="contextKey">AutoCompleteExtender.ContextKey的值,在调用本方法之前可以将其设置为用户的自定义值。重载函数中没有此项参数</param>  
/// <returns></returns>  
[WebMethod]  
public string [] GetListName( string prefixText, int count, string contextKey)  
{  
     List< string > items = new List< string >(count);  
     string SelectText = "" ; int rowCount = -1; DataTable dtt = new DataTable();  
   
     if ( string .IsNullOrEmpty(contextKey)) SelectText = "select MaterialID,MaterialName from Admin.BD_TechnicalStandard where MaterialName like '" + prefixText + "%' order by nlssort(MaterialName,'NLS_SORT=SCHINESE_PINYIN_M')" ;  
     else SelectText = "select MaterialID,MaterialName from Admin.BD_TechnicalStandard where MaterialName like '%" + prefixText + "%' and MaterialID NOT IN (select distinct MaterialID from Admin.BD_MSCMap) order by nlssort(MaterialName,'NLS_SORT=SCHINESE_PINYIN_M')" ; //contextKey: Remove  
     //SelectText = "select * from (" + SelectText + ") where rownum<=" + count.ToString() + " order by rownum ASC";//抽取前count个结果  
     dtt = moc.ExecSelectCommand(SelectText, out rowCount);  
     if (dtt != null && rowCount > 0)  
     {  
         //使用text-value键值对:AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem函数  
         foreach (DataRow dr in dtt.Rows) items.Add(AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(dr[ "MaterialName" ].ToString(), dr[ "MaterialID" ].ToString()));  
         return items.ToArray();  
     }  
     else return null ;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值