现在的位置: 首页 > 综合 > 正文

AutoCompleteExtender控件使用示例以及BUG

2012年11月11日 ⁄ 综合 ⁄ 共 4093字 ⁄ 字号 评论关闭
功能简介:最近在做个凭证单子,里面的一些编辑框是需要联想功能的。
功能实现:在AJAX功能的吸引下,我GOOGLE到了MS开发的ASP.NET 2.0 AJAX Extensions 1.0是基于.NET FRAMEWORK 2.0开发的,正合我意,下面利用AutoCompleteExtender控件来实现我需要的功能
部分主要代码如下:
HTML界面代码
    <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    
</cc1:ToolkitScriptManager>
    
<div>
        
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        
&nbsp;&nbsp;
        
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" MinimumPrefixLength="1" 
                CompletionInterval
="300"
                EnableCaching
="true"
                CompletionSetCount
="10"
 BehaviorID
="AutoCompleteEx" runat="server" ServiceMethod="GetCompletionList"
            UseContextKey
="True" TargetControlID="TextBox1">
                
<Animations>
                    
<OnShow>
                        
<Sequence>
                            
                            
<OpacityAction Opacity="0" />
                            
<HideAction Visible="true" />
                            
<ScriptAction Script="
                                // Cache the size and setup the initial size
                                var behavior = $find('AutoCompleteEx');
                                if (!behavior._height) {
                                    var target = behavior.get_completionList();
                                    behavior._height = target.offsetHeight - 2;
                                    target.style.height = '0px';
                                }"
 />
                                <Parallel Duration=".1">
                                
<FadeIn />
                                
<Length PropertyKey="height" StartValue="0" EndValueScript="$find('AutoCompleteEx')._height" />
                            
</Parallel>
                        
</Sequence>
                    
</OnShow>
                    
<OnHide>
                        
<Parallel Duration=".1">
                            
<FadeOut />
                            
<Length PropertyKey="height" StartValueScript="$find('AutoCompleteEx')._height" EndValue="0" />
                        
</Parallel>
                    
</OnHide></Animations>
        
</cc1:AutoCompleteExtender>
        
<script type="text/javascript">
            
// Work around browser behavior of "auto-submitting" simple forms
            var frm = document.getElementById("aspnetForm");
            
if (frm) {
                frm.onsubmit 
= function() { return false; };
            }
        
</script>
    
<input type="submit" style="display:none;" />
    
</div>

验证代码(CS)如下:

    public string[] GetAutoComplete(string prefixText, int count)
    {
        
string xm = "";
        
string fixxm = "";
        
if (count == 0)
        {
            count 
= 10;
        }

        if (prefixText.Equals(""))
        {
            
return new string[0];
        }

        List<string> items = new List<string>(count);

        ClassLibrary.SzsData.szsDataTable sd = new ClassLibrary.SzsData.szsDataTable();
        ClassLibrary.SzsDataTableAdapters.szsTableAdapter sta 
= new ClassLibrary.SzsDataTableAdapters.szsTableAdapter();
        sd 
= sta.GetData();
        
int rCount = 0;
        
for (int i = 0; i < sd.Rows.Count; i++)
        {
            xm 
= sd.Rows[i]["姓名"].ToString();
            
if (xm.Length > prefixText.Length)
            {
                fixxm 
= xm.Remove(prefixText.Length, xm.Length - prefixText.Length);
                
if (fixxm == prefixText)
                {
                    items.Add(sd.Rows[i][
"姓名"].ToString());
                    rCount
++;
                    
if (rCount >= 10)
                    {
                        
break;
                    }
                }
            }
        }

        return items.ToArray();
    }

控件存在的BUG:如果需要返回数字类型的,结果会在编辑框下显示UNDEFINE,也许是JAVASCRIPT中的单引出现的问题,所以例如下面的方法:

    public string[] GetStringLength(string prefixText)
    {
        
string[] items = new string[10];
        items[
0= prefixText.Length.ToString();
        
return items;
    }

则需修改为以下:

    public string[] GetStringLength(string prefixText)
    {
        
string[] items = new string[10];
        items[
0= "'"+prefixText.Length.ToString()+"'";
        
return items;
    }

希望下次MS在发布该组控件同时能解决此BUG。

抱歉!评论已关闭.