功能实现:在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 >
< 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 >
</ cc1:ToolkitScriptManager >
< div >
< asp:TextBox ID ="TextBox1" runat ="server" ></ asp:TextBox >
< 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();
}
{
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;
}
则需修改为以下:
{
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。
{
string [] items = new string [ 10 ];
items[ 0 ] = "'"+prefixText.Length.ToString()+"'";
return items;
}