在ASP.NET网站项目中添加Others.browser内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<browsers>
    <browser id="Safari3" parentID="Safari1Plus">
        <identification>
            <useragent match="Safari/\d+\.\d+" />
        </identification>
        <capture>
            <useragent match="Version/(?'version'\d+\.\d+)" />
        </capture>
        <capabilities>
            <capability name="browser" value="Safari3" />
            <capability name="version" value="${version}" />
        </capabilities>
        <controladapters>
            <adapter controlType="System.Web.UI.WebControls.Menu"
                     adapterType="" />
        </controladapters>
    </browser>
    <browser id="GoogleChrome" parentID="Safari3">
        <identification>
            <useragent match="Chrome/(?'version'\d+\.\d+)" />
        </identification>
        <capabilities>
            <capability name="browser" value="Googlebot" />
        </capabilities>
    </browser>
</browsers>

这两天尝试使用ASP.NET AJAX Extensions给ThinkPage的PageRank查询增加了文本框自动提示功能。当用户在输入网站地址的文本框中输入的时候会自动弹出一个下拉菜单,显示最近查询过的网站,并不断根据输入文本的内容缩小范围。比如:当输入“w”的时候,会列出所有w开头的网址,当输入到“www.f”的时候,就只显示www.felixwoo.com了。当点击下拉菜单中的一个网址后,会自动完成文本框中的内容。整个过程和IE的地址栏效果类似。显示效果如图:
http://www.felixwoo.com/wp-content/uploads/attachments/200611/04_123834_autocomplete.jpg

这个功能是通过ASP.NET AJAX AutoCompleteExtender实现的,只需要几行代码即可搞定。
首先需要在页面上添加asp:AutoCompleteExtender标记,别忘了之前要有asp:ScriptManager的声明。

<asp:ScriptManager ID="ScriptManager" runat="server" />
<asp:AutoCompleteExtender ID="AutoCompleteExtender1" TargetControlID="searchtext"
runat="server" ServiceMethod="GetCompletionList"
ServicePath="~/SearchAutoComplete.asmx" MinimumPrefixLength="1" />

其中TargetControlID为输入网址的文本框的ID,ServicePath为得到网站列表的webservice地址,ServiceMethod即那个webservice中的具体方法,MinimumPrefixLength=1意思是当输入一个字符的时候即开始提示。

在SearchAutoComplete.asmx中要做的就是从数据库中返回最近查询过的网站,并通过prefixText参数来过滤出只以prefixText开头的网站,这样才能实现逐级提示的功能。SearchAutoComplete.asmx代码如下:

[WebMethod]
public string[] GetCompletionList(string prefixText, int count)
{
List<string> list = DataProvider.GetURLList();
foreach (string s in list)
{
if (s.StartsWith(prefixText))
{
list.Add(s);
}
}
return list.ToArray();
}

其中List<string> list是声明的了一个string的范型,这个是.net 2.0中新增的功能,避免了原来使用ArrayList带来的装箱和拆箱的性能消耗。DataProvider.GetURLList()从从数据库返回所有网站列表,返回类型自然也是List<string>。其他的代码都很简单,相信一看就明白了。

就短短的几行代码就可以实现如此有趣和实用的功能,不能不说ASP.NET AJAX为我们做了太多。

微软最近发布了ASP.NET AJAX 1.0的官方测试版本,最终版将在今年底发布,并与ASP.NET 2.0整合。这玩意原来叫Atlas,现在竟然彻头彻尾的变了,我想最郁闷的莫过于Dflying Chen了,他即将出版的《Atlas程序设计》看来前功尽弃了。感叹啊,做程序员和做小姐没什么区别,都是靠吃青春饭。等正式版出来以后再去更新ThinkPage吧,ThinkPage的开发告一段落,继续回到我的English Kingdom。

注:ASP.NET AJAX是微软进军跨平台网络功能领域的作品,用于异步JavaScript的网络开发,可以让开发人员开发出更具互动行动网络应用,提高用户个性化水平。ASP.NET AJAX 1.0的主要功能有:异步客户端到服务器网络、服务器端ScriptManager和ScriptManagerProxy控件、客户端Trace类、Timer控件、Selector控件、JavaScript认证等等。微软ASP.NET AJAX官方网站是http://ajax.asp.net/,在这里你可以找到程序下载、说明文档、演示视频、交流社区等资源。

京ICP备05053527号
经过26次查询历时2.333秒终于生成了此页面
Powered by WordPress & Designed by Felix © 2008