All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
实例研究PHP函数isset和empty的区别_php资料_编程技术
Delphi项目的框架类-TForm 类实例-详解
delphi下拉列表组件(TComboBox)使用实例
ASP.NET中生成条形码_[Asp.Net教程]
WML学习(二):基本格式和文件头_[XML教程]
ASPX页面出现乱码的解决办法_[Asp.Net教程]
使用,XSL,样式表无法查看,XML,输入_.net资料_编程技术
5款纯div+css制作的弹出菜单(标准且无js)_[Html教程]_0
如何在SQL Server中对行进行动态编号_[SQL Server教程]
使用ASP.NET,Atlas编写显示真实进度的ProgressBar_[Asp.Net教程]
Reading number is top 10 pictures
Black and white also sexy--YanLiu2
Beauty shocked Japan Tokyo motor show model
避免防盗门的猫眼变成钥匙眼
中国文革时期的色情图片2
谁认识这位校花
The real super beauty5
狗狗与主人神同步1
陪睡门马睿菈自曝写真 称首拍大尺度照片1
Beautiful vacuum girl3
A cat have life principles
Download software ranking
Tram sex maniac 2 (H) rar bag15
美女写真3
Unix video tutorial9
Eclipse 4.2.2 For Win32
Sora aoi 120 minutes
Boxer vs Yellow3
实战黑客不求人
Sora aoi, the nurse, uniform ,nursing assistant
Tram sex maniac 2 (H) rar bag7
ASP.NET.2.0.XML.高级编程(第3版)
delv published in(发表于) 2014/1/6 8:47:21 Edit(编辑)
AJAX.NET框架构建Lookup服务器控件_[Asp.Net教程]

AJAX.NET框架构建Lookup服务器控件_[Asp.Net教程]

AJAX.NET框架构建Lookup服务器控件_[Asp.Net教程]

一、 简介

  今天,AJAX成为软件界最流行的词藻之一;然而,这种思想并不是新的,只是由于某种原因,在去年下半年,它才变得流行起来。随着基于web的应用软件的不断发展,用户往往要求更丰富更快速的接口。而AJAX能极大地改进用户的web应用程序体验。

  对于我来说,AJAX是全新的。在一段时间以前,由于缺乏可试用的工具和现成的可用库,我读了一些文章才得到一些思想。然而最近,我发现了Ajax.NET-一个相当有力的支持异步回调的框架。

  在本文中,我将描述基于Ajax.NET创建查找控件的经验。为了构建一个查找控件,你需要具备:

  1. 一个服务器方法,它能够返回一个匹配记录的列表。

  2. JavaScript程序,用以处理回寄并且显示一个匹配记录的列表。

  3. 在ASPX/ASCX页面中具有一个输入字段。

  在此,我将不描述Ajax.NET的安装,因为它很简单,并且网上有很多的资源可供你参考。

  二、 服务器端部分

  这部分比较简单。我仅需要创建一个方法,它返回一个ArrayList的匹配记录并在该方法所在的位置注册一个类:


public class Main : Page{
 private void Page_Load(object sender, EventArgs e){
  Utility.RegisterTypeForAjax(typeof (Main));
 }
 [AjaxMethod()]
 public ArrayList GetSearchItems(string query){
  ArrayList items = GetRecords();
  ArrayList matchItems = new ArrayList();
  foreach (string item in items){
   if (item.ToLower().StartsWith(query.ToLower()))
    matchItems.Add(item);
  }
  return matchItems;
 }
 private ArrayList GetRecords(){
  ArrayList items = new ArrayList();
  items.Add("Ted");
  items.Add("Teddy");
  items.Add("Mark");
  items.Add("Alfred");
  return items;
 }
. . .

  该GetSearchItems方法取得所有记录(来自于任何源)的一个列表并且过滤那些用查询参数开头的记录。该查询是用户在输入字段输入的内容和过滤器。

  三、 客户端部分

  首先,我决定写一个很简单的JavaScript-它将显示一个DIV,并且找到的记录正好位于查询输入字段的下面。我认为这"接近"了目标,但是它要求选择下面的项之一。最简单的事情是把所有的项转到超链接并用正确的点击值来填充查询域。请看下面的代码:


<INPUT id=search type=text name=search runat="server"
autocomplete ="off">
<div id="list"></div>
autocomplete="off"是必需的,用于告诉浏览器不要显示该输入域的可能的值。否则,我们的控件将不工作。
function GetSearchItems_CallBack(response) {
 var div = document.getElementById("list");
 div.innerHTML = "";
 if (response.value != null && response.value.length > 0) {
  for (var i = 0; i < response.value.length; ++i){
   div.innerHTML += "<a href=\"javascript:Fill('" + response.value[i] + "');\">" +
response.value[i] + "</a><br />";
  }
 }

  JavaScript GetSearchItems_CallBack函数为onkeydown事件所调用。这可以在后台代码中完成,或者在*.aspx页面中实现。现在让我们使用后台代码方法。


private void Page_Load(object sender, EventArgs e){
 search.Attributes.Add("onkeydown","javascript:Main.GetSearchItems(this.value,GetSearchItems_CallBack);");
 Utility.RegisterTypeForAjax(typeof ( Main ));
}

  该结果看起来如下图所示:




  尽管这种情形最简单,但并不是很有用。在本例中,你只是简单地输入一些内容,然后点击出现的列表中的一个链接。然而,如果改进这个示例的话,它还需要实现一些较强的键盘支持;例如,应该能使用up/down键来进行列表导航,而使用回车键实现完成。


  四、 查找JavaScript

  我以前从来没在JavaScript中处理过键盘问题(由我自己写一个大而复杂的脚本太复杂了)。我了解JavaScript,只是掌握得不如象C#一样好,因此我的第一反应是"在网上查找一些适合于我们的需要的东西"。应该说,没有多少自由脚本可用。我花了大约一个小时才找到一个好脚本。其参考地址是:http://www.nsftools.com/tips/XmlHttpLookup.js。

  该脚本提供了一个函数来查询服务器。我仅在mainLoop函数中作了一点修改即满足了我的要求。


mainLoop = function() {
 val = escape(queryField.value);
 if(lastVal != val && searching == false){
  var response = Main.GetSearchItems(val);
  showQueryDiv('smi', response.value); lastVal = val;
 }
 setTimeout('mainLoop()', 100);
 return true;
};

  该脚本应该经由onload处理器启用:

<body onload="InitQueryCode('search')">

  最后,我用了很少的时间就实现我所需要的功能。但遗憾的是,该方案无法重用;因此我决定创建一个简单的服务器控件。

  五、 服务器控件

  该AJAX查找服务器控件很简单。原有解决方案的下列部分可进一步定制:

  · 回调函数的命名。

  · JavaScript文件的路径。

  · 匹配列表的背景和加亮,div padding,等等的颜色。

  具体实现相当简单。首先,我们可以从TextBox中派生我们的控件。然后,我们仅需要设置一些变量并注册一些JavaScript函数。


using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace play{
/// <summary>
/// AjaxLookup.cs
/// </summary>
public class AjaxLookup : TextBox{
 private string scriptFile = "";
 private string callBackFunction = "";
 private string backgroundColor = "#EEE";
 private string highlightColor = "#CCC";
 private string font = "Verdana";
 private string divPadding = "2px";
 private string divBorder = "1px solid #CCC";
 public string ScriptFile{
  get { return scriptFile; }
  set { scriptFile = value; }
 }
 public string CallBackFunction{
  get { return callBackFunction; }
  set { callBackFunction = value; }
 }
 public string BackgroundColor{
  get { return backgroundColor; }
  set { backgroundColor = value; }
 }
 public string HighlightColor{
  get { return highlightColor; }
  set { highlightColor = value; }
 }
 public string DivFont{
  get { return font; }
  set { font = value; }
 }
 public string DivPadding{
  get { return divPadding; }
  set { divPadding = value; }
 }
 public string DivBorder{
  get { return divBorder; }
  set { divBorder = value; }
 }
 public AjaxLookup(){
  this.Attributes.Add("autocomplete", "off");
 }
 protected override void Render(HtmlTextWriter writer){
  base.Render(writer);
  //绑定包含几乎所有逻辑的脚本
  Page.RegisterStartupScript("LoadScript", "<script language='JavaScript' src='" + ScriptFile + "'>" +
"</script>");
  // 包括UI设置
  string styles = String.Format( @"<script language='JavaScript'>var DIV_BG_COLOR = '{0}';
  var DIV_HIGHLIGHT_COLOR = '{1}';
  var DIV_FONT = '{2}';
  var DIV_PADDING = '{3}';
  var DIV_BORDER = '{4}';
  </script>",
  BackgroundColor, HighlightColor, DivFont,
  DivPadding, DivBorder);
  Page.RegisterStartupScript("LookupStyles", styles);
  // 初始化回寄处理
  Page.RegisterStartupScript("RegisterScript",
"<script language='JavaScript'>" +
"InitQueryCode('" + this.ClientID + "')</script>");
  //设置正确的回调函数
  Page.RegisterStartupScript("RegisterCallBack",
@"<script language='JavaScript'>
mainLoop = function() {
val = escape(queryField.value);
  if(lastVal != val && searching == false){
   var response = " + CallBackFunction + @"(val);
   showQueryDiv('smi', response.value); lastVal = val;
  }
  setTimeout('mainLoop()', 100);
  return true;};
  </script>");
 }
}

  该控件可以通过如下方式使用:


<Ajax:AjaxLookup
Runat="Server"
id="search"
BackgroundColor="#EEE"
DivBorder="1px solid #CCC"
DivPadding="2px"
DivFont="Arial"
HighlightColor="#C30"
CallBackFunction="Main.GetSearchItems"
ScriptFile="lookup.js" />





  这里是查找控件在运行结果中看上去的样子:




  我这里的实现不很理想,但却是一个好的开始。你可以通过添加另外一些参数加以改进。

  六、 结论

  其实,Ajax.NET还具有其它许多功能。作为学习,从一个最简单的查找控件开始是比较合理的,但是我希望在未来工程的许多UI设计中都会基于AJAX技术实现。


作者:朱先忠编译 来源:天极网





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.