正 文

在ASP.NET中实现AJAX


www.7dspace.com  更新日期:2005-11-1 4:54:18  七度空间


  SessionState

  服务器端函数中很可能需要访问会话信息。为此,只需要通过传递给Ajax.AjaxMethod属性的一个参数告诉Ajax启用这种功能。

  在考察包装器会话能力的同时,我们来看看其他几个特性。这个例子中我们有一个文档管理系统,用户编辑的时候会对文档加锁。其他用户可以请求在文档可用的时候得到通知。如果没有AJAX,我们就只能等待该用户再次返回来检查请求的文档是否可用。显然不够理想。使用支持会话状态的Ajax就非常简单了。

  首先来编写服务器端函数,目标是循环遍历用户希望编辑的documentId(保存在会话中)并返回所有已释放的文档。

[Ajax.AjaxMethod(HttpSessionStateRequirement.Read)]
public ArrayList DocumentReleased(){
  if (HttpContext.Current.Session["DocumentsWaiting"] == null){
    return null;
  }
  ArrayList readyDocuments = new ArrayList();
  int[] documents = (int[])HttpContext.Current.Session["DocumentsWaiting"];
  for (int i = 0; i < documents.Length; ++i){
    Document document = Document.GetDocumentById(documents[i]);
    if (document != null && document.Status == DocumentStatus.Ready){
      readyDocuments.Add(document);
    }      
  }
  return readyDocuments;
  }
}

  要注意,我们指定了HttpSessionStateRequirement.Read值(还可以用Write和ReadWrite)。

  现在编写使用该方法的JavaScript:

<script language="javascript">
function DocumentsReady_CallBack(response){
  if (response.error != null){
    alert(response.error);
    return;
  }
  if (response.value != null && response.value.length > 0){
    var div = document.getElementById("status");
    div.innerHTML = "The following documents are ready!<br />";
    for (var i = 0; i < response.value.length; ++i){
      div.innerHTML += "<a href=\"edit.aspx?documentId=" + response.value[i].DocumentId + "\">" + response.value[i].Name + "</a><br />";
    }    
  }
  setTimeout('page.DocumentReleased(DocumentsReady_CallBack)', 10000);
}
</script>
<body onload="setTimeout('Document.DocumentReleased(DocumentsReady_CallBack)', 10000);">

  我们的服务器端函数在页面加载时调用一次,然后每隔10秒钟调用一次。回调函数检查响应看看是否有返回值,有的话则在div标签中显示该用户可使用的新文档。

  结束语

  AJAX技术已经催生了原来只有桌面开发才具备的健壮而丰富的Web界面。Ajax .NET包装器让您很容易就能利用这种新的强大技术。请注意,Ajax .NET包装器和文档仍在开发之中。

6页,页码:[1] [2] [3] [4] [5] [6] 

上一篇:关于ebXML和UDDI的疑惑
下一篇:用好Google本地搜索有技巧
作者:Karl Seguin  来源:MSDN ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐