原来做asp.net的时候,有些表单是带有参照类型的,比如城市的省份城市的录入,或者员工姓名的录入,以前的做法是走了两个极端,一种是用户在 TextBox中输入,另一种是在DropDownList中进行选择。第一种用户需要记住录入的全部内容,输入效率才高,第二种无需提前知道录入内容,但是当供选择的记录过多的时候,选择起来也比较麻烦。那么一种智能式选择是一种折中的做法,我们原来是设置字典参照,然后在字典中选择。现在有了 Atlas,这种事情实现起来就简单多了。atlas的AutoCompleteProperties就可以满足这方面的要求。它可以通过设置 TargetControlID来控制某个控件,并且需要提供一个Web Services的路径和Web Services的方法。
AutoCompleteProperties的属性包括
下面是一个Demo:
按照上篇文章介绍,创建一个Atlas网站,然后再一个页面中添加如下代码:
下面是处理智能选择的网络服务:
AutoCompleteProperties的属性包括
属性名称 | 属性描述 | 备注 |
TargetControlID | 指定要控制的控件的ID | 一般为TextBox的ID |
ServicePath | 处理智能选择列表的Web Services路径 | |
ServiceMethod | 处理智能选择列表的网络服务服务 | 该方法一般包含两个参数(string prefixText,int count) |
Enabled | 是否可用 | |
MinimumPrefixLength | 最小前缀的长度大小 | 当输入长度达到最小的时候,便提供智能选择 |
按照上篇文章介绍,创建一个Atlas网站,然后再一个页面中添加如下代码:
1
@H_404_61@
<
div
>
2 @H_404_61@
<
asp:Panel
ID
="Panel1"
runat
="server"
Height
="125px"
Width
="125px"
>
3 @H_404_61@
</
asp:Panel
>
4 @H_404_61@
<
asp:TextBox
ID
="TextBox1"
runat
="server"
></
asp:TextBox
><
asp:DropDownList
ID
="DropDownList2"
5 @H_404_61@
runat
="server"
>
6 @H_404_61@
</
asp:DropDownList
>
7 @H_404_61@
<
atlas:autocompleteextender
ID
="AutoCompleteExetender1"
runat
="server"
DropDownPanelID
="Panel1"
>
8 @H_404_61@
<
atlas:AutoCompleteProperties
TargetControlID
="TextBox1"
Enabled
="true"
ServicePath
="WebService.asmx"
ServiceMethod
="GetWordList"
MinimumPrefixLength
="1"
/>
9 @H_404_61@
</
atlas:autocompleteextender
>
10 @H_404_61@
</
div
>

2 @H_404_61@

3 @H_404_61@

4 @H_404_61@

5 @H_404_61@

6 @H_404_61@

7 @H_404_61@

8 @H_404_61@

9 @H_404_61@

10 @H_404_61@

下面是处理智能选择的网络服务:
1
@H_404_61@
using
System;
2 @H_404_61@
using
System.Web;
3 @H_404_61@
using
System.Collections;
4 @H_404_61@
using
System.Web.Services;
5 @H_404_61@
using
System.Web.Services.Protocols;
6 @H_404_61@
using
System.IO;
7 @H_404_61@
8 @H_404_61@
9 @H_404_61@
@H_404_61@
/**/
/// <summary>
10@H_404_61@
/// WebService 的摘要说明
11@H_404_61@
/// </summary>
12 @H_404_61@
[WebService(Namespace
=
"
http://tempuri.org/
"
)]
13 @H_404_61@
[WebServiceBinding(ConformsTo
=
WsiProfiles.BasicProfile1_1)]
14 @H_404_61@
@H_404_61@
public
class
WebService : System.Web.Services.WebService
@H_404_61@
{
15@H_404_61@
16@H_404_61@
@H_404_61@
public WebService () @H_916_502@@H_404_61@
{
17@H_404_61@
18@H_404_61@
//如果使用设计的组件,请取消注释以下行
19@H_404_61@
//InitializeComponent();
20@H_404_61@
}
21@H_404_61@
public string[] AutoCompleteWordList = null;
22@H_404_61@
[WebMethod]
23@H_404_61@
public string[] GetWordList(string prefixText, int count)
24@H_404_61@
@H_404_61@
@H_404_61@
{
25@H_404_61@
if (AutoCompleteWordList == null)
26@H_404_61@
@H_404_61@
@H_404_61@
{
27@H_404_61@
string[] tempList = File.ReadAllLines(Server.MapPath("~/App_Data/Words.txt"),System.Text.Encoding.Default);
28@H_404_61@
Array.sort(tempList, new CaseInsensitiveComparer());
29@H_404_61@
AutoCompleteWordList = tempList;
30@H_404_61@
}
31@H_404_61@
int index = Array.BinarySearch(AutoCompleteWordList,prefixText,new CaseInsensitiveComparer());
32@H_404_61@
if(index<0)
33@H_404_61@
@H_404_61@
@H_404_61@
{
34@H_404_61@
index=~index;
35@H_404_61@
}
36@H_404_61@
int matchedCount = 0;
37@H_404_61@
for (matchedCount = 0; matchedCount < count&&matchedCount+index<AutoCompleteWordList.Length; matchedCount++)
38@H_404_61@
@H_404_61@
@H_404_61@
{
39@H_404_61@
if (!AutoCompleteWordList[matchedCount + index].StartsWith(prefixText,StringComparison.CurrentCultureIgnoreCase))
40@H_404_61@
@H_404_61@
@H_404_61@
{
41@H_404_61@
break;
42@H_404_61@
}
43@H_404_61@
}
44@H_404_61@
string[] returnValue = new string[matchedCount];
45@H_404_61@
if (matchedCount > 0)
46@H_404_61@
@H_404_61@
@H_404_61@
{
47@H_404_61@
Array.copy(AutoCompleteWordList,index, returnValue,0, matchedCount);
48@H_404_61@
}
49@H_404_61@
return returnValue;
50@H_404_61@
}
51@H_404_61@
52@H_404_61@
}
53 @H_404_61@
54 @H_404_61@
如果在app_data中的txt文件wors.txt。 此时,运行效果如下: 这个控件虽然好用易用,但是我思考却不应该滥用。比如在一个很多人并发填写表单的时候,这样每写几个字就调用一下Web Services,每次取回来的东西也不会太大,这对于网络服务来说,连接占用的时间过多,这严重偏离了网络服务大块头设计的原则。因此应用也要看下环境。

2 @H_404_61@

3 @H_404_61@

4 @H_404_61@

5 @H_404_61@

6 @H_404_61@

7 @H_404_61@

8 @H_404_61@

9 @H_404_61@


10@H_404_61@

11@H_404_61@

12 @H_404_61@

13 @H_404_61@

14 @H_404_61@



15@H_404_61@

16@H_404_61@



17@H_404_61@

18@H_404_61@

19@H_404_61@

20@H_404_61@

21@H_404_61@

22@H_404_61@

23@H_404_61@

24@H_404_61@



25@H_404_61@

26@H_404_61@



27@H_404_61@

28@H_404_61@

29@H_404_61@

30@H_404_61@

31@H_404_61@

32@H_404_61@

33@H_404_61@



34@H_404_61@

35@H_404_61@

36@H_404_61@

37@H_404_61@

38@H_404_61@



39@H_404_61@

40@H_404_61@



41@H_404_61@

42@H_404_61@

43@H_404_61@

44@H_404_61@

45@H_404_61@

46@H_404_61@



47@H_404_61@

48@H_404_61@

49@H_404_61@

50@H_404_61@

51@H_404_61@

52@H_404_61@

53 @H_404_61@

54 @H_404_61@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。