ASP.NET Web应用程序的简单AJAX实现

Ajax(asp.net)技术实现异步刷新和控件功能示例流程 Ajax(asp.net)技术实现异步刷新和控件功能示例流程实验环境工具:VS2008,AjaxControlToolkit.dll3.5,sql2005等一,     在项目中添加新项新建一个AJAX Web窗体,命名Default.aspx二,     从工具箱中AJAX Extensions中拖选一个UpdatePanel做局部刷新容器(如图)下面所有的源视图代码都在中写三,     在当前页面插入一个表格,8行3列,仿一个注册页面(如图)四,     这里我们定义一些css(样式表)以及加一些图片, 阅读详情
一、 简介

  本文描述了一种简单的方式来实现在 ASP.NET web应用程序中加入AJAX功能。我们还将讨论使用AJAX的优缺点。为了说明问题,本文还提供了一些可用的 JavaScript和 C#.NET代码。

   二、 为什么使用AJAX

  大多数读者可能已经知道,AJAX代表了异步 JavaScript+ XML。这种技术首先由微软在1999年引入,并以"使用远程调用的DHTML/JavaScript web应用程序"著称。这一技术的基本思想是,允许一个 互联网浏览器向一个远程页面/服务作异步的HTTP调用,并且用收到的结果更新一个当前web页面而不必刷新整个页面。根据这种技术创建者的意见,这种技术应能够改进客户端的体验-使得HTTP页面外观与使用感觉很类似于 Windows桌面应用程序。

  因为这种技术的核心实现是基于互联网浏览器功能,所以其用途在当时是很有限的。但是,几年过去了,随着新一代浏览器的支持和大量的应用实践(例如Google,Amazon.com,eBay等),这种技术已经重新焕发生机。

  今天,它以AJAX著名,被作为任何提供高级用户体验的动态页面的自然的构成部分。

   三、 方案描述

  在本文中我们所推荐的方案尽管很简单,然而却十分有效地实现了AJAX功能。这个程序很容易维护和修改,不要求开发者具备任何特别的技巧;而且,根据我们的经验,它还是跨浏览器兼容的。

  基本上,一个常规的类似AJAX的实现包括两个主要组成部分:一个使用JavaScript代码进行AJAX调用并接收响应的客户端HTML页面;一个远程页面-它能够接收一个请求并对请求的信息加以响应。在客户端页面中的JavaScript代码负责实例化一个 XMLHttp对象,然后提供给这个对象一个回调方法-它负责处理收到的信息,最后把请求经由XmlHttp对象发送到远程页面。所有这些都是通过JavaScript代码来实现的。

  我们的方法主要是针对于ASP.NET应用程序中的应用,并且考虑下列可能的情形:

  · AJAX调用可以发生于web应用程序的不同的ASP.NET页面上甚至是远程页面上;

  · 一远程页面URL可能包含动态计算的参数,并且可能在ASP.NET页面的code-behind处构建一个URL字符串更为方便些;

  · 在更新一个HTML页面之前,一个远程页面可能响应于一个复杂的数据分析要求;

  · 一远程页面可能或者是一个外部的第三方页面,或者是该Web应用程序自己的页面或服务。

  所有的这些考虑都显示在下图中:


  四、 实现

  (一) 基本AJAX JavaScript方法

  我把所有的JavaScript方法分成两部分:调用页面特定的JavaScript方法,和通用于所有调用页面的AJAX JavaScript方法。特定的方法还包括一个回调函数,由于它负责更新页面内容。通用的AJAX方法负责实例化一个XmlHttp对象并向远程页面发送异步请求。

  得到一个XmlHttp对象的过程因浏览器的不同而有所不同。我把它们区分为两种不同的基本类型:微软浏览器(IE家族之一)和Mozilla浏览器(它是指Mozilla Firefox,Netscape,或Safari之一)。我还在Opera浏览器上测试了本文中的代码,但是我不可能保证它会一直工作良好。

function GetXmlHttpObject(handler){
 var objXmlHttp = null;
 if (!window.XMLHttpRequest) {
  //微软
  objXmlHttp = GetMSXmlHttp();
  if (objXmlHttp != null) {
   objXmlHttp.onreadystatechange = handler;
  }
 }
 else {
  // Mozilla | Netscape|Safari
  objXmlHttp = new XMLHttpRequest();
  if (objXmlHttp != null) {
   objXmlHttp.onload = handler;
   objXmlHttp.onerror = handler;
  }
 }
 return objXmlHttp;
}
function GetMSXmlHttp(){
 var xmlHttp = null;
 var clsids = ["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0",
"Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0",
"Msxml2.XMLHTTP.2.6","Microsoft.XMLHTTP.1.0",
"Microsoft.XMLHTTP.1","Microsoft.XMLHTTP"];
 for(var i=0; i<clsids.length && xmlHttp == null; i++) {
  xmlHttp = CreateXmlHttp(clsids[i]);
 }
 return xmlHttp;
}
function CreateXmlHttp(clsid) {
 var xmlHttp = null;
 try {
  xmlHttp = new ActiveXObject(clsid);
  lastclsid = clsid;
  return xmlHttp;
 }
 catch(e) {}
}

  如你所见,GetXmlHttpObject方法接受一个处理器参数-它是一个应该在页面特定的代码定义的回调方法的名字。现在,既然我们已经有了一个XmlHttp对象,那么我们就可以发送异步的请求了。

function SendXmlHttpRequest(xmlhttp, url) {
 xmlhttp.open('GET', url, true);
 xmlhttp.send(null);
}

  我使用一个指向一个给定URL的GET HTTP方法,但是这可以通过修改上面的JS代码加以改变。

 

(二) 页面特定的方法

  现在,我们已经建立起实现一个到远程页面调用的所有方法。为此,我们需要把回调函数名传递给GetXMLHttpObject方法,然后把URL串传递给SendXMLHttpRequest方法。

var xmlHttp;
function ExecuteCall(url){
 try {
  xmlHttp = GetXmlHttpObject(CallbackMethod);
  SendXmlHttpRequest(xmlHttp, url);
 }
 catch(e){}
}
//当状态改变时(例如收到数据时),CallbackMethod将激发
function CallbackMethod() {
 try {
  //readyState=4 或'complete' 代表了数据已经返回
  if (xmlHttp.readyState == 4 ||
xmlHttp.readyState == 'complete') {
   var response = xmlHttp.responseText;
   if (response.length > 0) {
    //更新页面
    document.getElementById("elementId").innerHTML= response;
   }
  }
 }
 catch(e){}
}

  CallbackMethod负责更新页面内容。在我们的示例中,它只是简单地更新给定HTTP元素的内部HTML。但是,在实际开发中,它可能更为复杂些。

  有关于调用页面实现的最后一个问题是,我们如何调用ExecuteCall JS方法。其实,这依赖于这个页面正在做什么。在一些情况中,ExecuteCall方法在JS事件被激发时被调用。但是,如果情况不是这样,我们可以把这个方法注册为这个页面的一个启动脚本-使用在该页面的code-behind中的相应的C#代码。

Page.ReGISterStartupScript("ajaxMethod",
String.Format("<script>ExecuteCall('{0}');</script>", url));

  我们可以把这一行代码添加到ASP.net code-behind文件的Page_Prerender或Page_Load方法中。

  (三) 远程页面

  下面,让我们分析一下过程页面看起来的样子。如果这是一个ASP.NET页面(我们假定如此),那么我们仅对它的code-behind感兴趣。我们可以很容易地从这个.aspx文件中移去所有代码:它不会以任何方式影响这个页面的行为。

  例如,我们使用一个公共的Web服务-它能够把温度值从摄氏转换为华氏(以及相反的实现)。此处提供了一个这样的可用的服务。如果你把这个URL作为一个web引用添加到你的工程中,那么Visual Studio将在你的当前的命名空间中生成一个名为com.developerdays.ITempConverterservice的代理类。我们的远程ASP.NET页面(假设命名为getTemp.aspx),将接收一个查询串参数(名为"temp")-它应该包含一个要转换的摄氏温度的整型值。所以,到远程页面的目标URL看上去类似于:http://localhost/getTemp.aspx?temp=25。下面显示了这个页面的code-behind:

private void Page_Load(object sender, EventArgs e){
 Response.Clear();
 string temp = Request.QueryString["temp"];
 if (temp != null) {
  try {
   int tempC = int.Parse(temp);
   string tempF = getTempF(tempC);
   Response.Write(tempF);
  }
  catch { }
 }
 Response.End();
}
private string getTempF(int tempC){
 com.developerdays.ITempConverterservice
 sVC = new ITempConverterservice();
 int tempF = svc.CtoF(tempC);
 return tempF.ToString();
}

  根据我们的惯例,现在我们可以为将传递到RegisterStartupScript方法中的远程页面构建一个URL字符串,象下面这样:

int tempC = 25;
string url=String.Format("http://localhost/"+"getTemp.aspx?temp={0}", tempC);

  使用这种方法并结合一个中间ASP.NET页面调用允许简化响应处理,特别是在请求分析的时候。在简单的情况中,当响应仅包含文本数据时,我们可以把远程服务URL直接传递给JS ExecuteCall方法。

  五、结论

  本文意在向你展示把AJAX技术使用于任何ASP.NET应用程序的简单性。然而,AJAX也有一些缺点,从用户体验角度来看,它也提供了一些优点。这完全要由开发者来决定是否使用AJAX技术,但是我在本文中仅向你展示了简单的情形,它不需要花费很长时间且不需要任何特定技巧。

在ASP.NET中显示进度条 对于加载时间比较长的ASP.NET页面,我们可以在客户端浏览器中显示进度条来显示页面正在装载。下面就是具体的实现过程:      1.新建项目,名字为WebPortal,在项目类型中选择Visual C#项目或者Visual Basic项目都可;   2.在模板类型中选择ASP.NET Web应用程序;   3.位置里输入:http://localhost/WebPortal;   4.添加新项:名字为ShowProgress的Web窗体。   5.在您的Web窗体ShowProgress.aspx上添加任何其他的 立即下载

相关推荐

ASP.NET Ajax 带进度条文件上传示例

我自己写的Ajax带进度条文件上传,IE8、Opra、FireFox测试可用,完全开源,非控件,代码和原理都非常简洁(VS2010项目文件)。 仅供个人使用学习之用。 严禁转截至各种源码下载网站。

asp/ajax实现进度条方案

由asp生成静态页面html的时候,如果内容较多,采用进度条的方式显示当前进度是一个很好的办法。当然,进度条的应用,一般是耗时较长的操作,如果不采用进度条显示当前状态,不管是对于前台应用的客户还是对于管理员在后台的应用来说,总是让人不太舒服的事情。      记得我在04年将租房网程序改版时,主要的目的就是将房源信息的动态页面生成纯静态HTML页面。当时是通过Form表单提交当前页面,通过参数值

大头爸爸的博客 5787

ASP.NET实现EXCEL数据导入进度条ajax

ASP.NET实现EXCEL数据导入进度条ajax。有已经实现的工程源代码。有进度条和百分比统计,已导入数量和总数统计。

Asp.Net 上传大文件专题(4)--利用ajax技术显示上传进度

      回顾上一篇:       我们介绍了如何从HTTP请求流中将数据部分进行截取,同时将数据相关信息进行保存。       本篇概述:       用过ajax的朋友应该有听过XmlHttpRequest对象,ajax其实就是通过XmlHttpRequest对象来向服务器发出异步请求,并从服务器获得数据,然后用javascript来操作DOM而更新页面。       本...

weixin_33774308的博客 169

ASP.net AJAX进度条实例(批量插入大量数据)

代码说明: 该示例使用简单,完成插入指定数量的数据,ajax写入数据库,并显示精准进度,实时返回运行过程。对于大量插入数据库的操作,可以做到无刷,不超时; 目录结构: Css/style.css -------------进度条样式 Js/ProcessBar.js ----------Ajax方法以及设置进度条方法 Default.htm ---------------本示例 ProcessExecute.aspx -------后台执行插入数据库文件 演示:http://www.px915.com/Demo_ProcessBar/

ASP.NET+AJAX实现进度条上传文件

该程序采用了jquery框架,实现了小文件上传,不超过80Mb,可以在web.config文件中进行相应的配置,但是有个最大值,具体需要查看msdn,下一篇文章我将会实现大文件上传,下一篇文章估计得过段时间,因为接下来这几天我需要忙着去面试。另外,开发环境采用visual studio 2010 .net framework 4.0,运行的时候大家注意一下是否满足要求,好了,下面直入正题。 先来看看实现原理。基本原理:一个页面进行文件上传,另外一个页面去监听这个文件上传了多少。 这里面有两个地方需要解释一下:第一个,如何知道监听的这个文件就是上传的这个文件?实现机制很简单,就是让asp.net产生一个唯一的guid,这个id序号是唯一的,通过ajax取出来赋值给一个隐藏字段;第二个,如何获取guid标志的文件信息?通过asp.net缓存机制实现,上传的过程中,不断的将上传信息往缓存里面写,直到文件上传完成,而在另外一个通过guid获取缓存的信息,信息包括你想要的信息,比如上传了多少字节、消耗了多长时间等。

ajax提交百分比,带百分比的JQuery Ajax请求

我需要获得ajax请求的%完成率.我尝试了以下方法:$(document).ready(function() {$.ajax({xhr : function() {var xhr = new window.XMLHttpRequest();xhr.upload.addEventListener("progress", function(evt) {if (evt.lengthComputable)...

weixin_33900596的博客 370

C#集成Bartender:动态图片标签打印的实战与优化

本文详细介绍了在C#程序中集成Bartender实现动态图片标签打印的实战方法与优化策略。通过具名数据源绑定、图片对象尺寸控制等核心技巧,解决了动态图片显示/隐藏的难题,并提供了从模板设计、代码架构到性能优化、错误处理的全流程指南,帮助开发者构建稳定高效的工业级标签打印系统。

weixin_29216957的博客 432

ASP.NET AJAX---UpdateProgress控件小实例 (实现进度条&设置显示图片时间)

①.aspx文件 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=

马克菠萝包ଲ的博客 418

基于集成运放心电放大器设计(原创)

原创作者:einyboy or alert 最近在看美剧《危机边缘》关于边缘科学的案件,科技控可以看一下,但建议不在吃东西的时候看。想像力是创造的思想源头,动手能力则是创造的车床。 自认为是没有想像力的那类,只能发挥动手能力了。 心电测量简介 图1 心电极接线图 如图1心电测试一般使用3个心电极进行测量,各个电极的说明如下: RA: Right Arm缩写,右手电极 LA: L...

huandaohack的专栏 6926

EM4095低频RFID曼彻斯特解码实战:从原理图到MCU代码实现

本文详细介绍了EM4095低频RFID读卡器的设计与实现,从芯片工作原理、天线设计到曼彻斯特解码算法。重点讲解了基于STM32的MCU代码实现,包括定时器捕获、数字滤波和错误处理,为开发125kHz RFID系统提供实用指南。

oil88的博客 717

在ASP.NET中使用AJAX的简单方法

在ASP.NET中使用AJAX的简单方法2006-10-24 07:00 作者: 李宁 出处: 天极开发 责任编辑:>方舟   介绍  本文介绍了使用AJAX和ASP.NET编写web应用程序的一个简单方法。同时,讨论了使用AJAX的好处和不足。为了举例说明,本文给出了相应的JavaScript代码和用C#.NET编写的ASP.NET代码。   为什么使用AJAX  也许大多数人已

loverbabyz的专栏 445

【智能机器人开发全流程:硬件选型、软件架构与ROS实战,打造高效机器人系统】

通过模块化设计与ROS框架的灵活扩展,可快速搭建适应不同场景的机器人系统。实际开发中需重点关注。

dally2的博客 6049

ASP.NET Core 简单文件上传

使用AJAX和ASP.NET Core MVC上传文件再简单不过了。此代码允许上传多个文件,并与 .NET Core 3.1、.NET 6和.NET 8兼容。如果使用 ASP.NET MVC 5,请转到.NET Framework 示例。首先,在 Visual Studio 中创建一个名为“Website”的 ASP.NET Core Web 应用程序 (MVC)。如果想要实现拖放版本,请参阅本文:ASP.NET Core MVC AJAX Drap-n-Drop 文件上传。用 C# 编写的服务器端代码。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1万+

2021年J题:基于STM32F103的周期信号波形识别与参数测量系统设计(立创EDA+SZPT_ZXL)

本文详细复盘了2021年全国大学生电子设计竞赛J题获奖项目,手把手教你如何基于STM32F103微控制器设计并实现周期信号波形识别与参数测量系统。文章深入剖析了硬件电路设计(包括程控放大、工作点抬升与滞回比较器)与核心软件算法(如动态采样、FFT频谱分析与波形识别逻辑),并分享了DMA传输、FFT库使用等实战要点与避坑指南,为嵌入式信号处理与电赛备赛提供了宝贵经验。

weixin_32673065的博客 230

scDeepCluster_pytorch代码解读与文章理解

论文:Clustering single-cell RNA-seq data with a。

qq_34179307的博客 915

创建ASP.NET AJAX风格的资源管理器

Matt Berseth提供了一篇不错的使用ASP.NET AJAX 服务器控件实现类似Windows资源管理器的文章,地址是:[url]http://mattberseth.com/blog/2007/07/hwo_to_create_an_aspnet_ajax_s.html[/url]。尽管此程序实现功能有限,但这种思路是相当不错的。相信,在众多的基于ASP.NET平台...

weixin_33882443的博客 70

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

Coding... 5503

基于asp.net下使用jquery实现ajax的解决方法

无论是jquery还是ajax在今天来讨论已经很落后了,网上也有非常多的这方面的资料,但是依然有不少新手对此很茫然。本文以最简单的方法为新手示范如何使用jquery实现ajax技术(所以本文是专为新手所写,老鸟勿喷,大神此处省略一万字)。至于什么是jquery什么是ajax,自己谷歌去。 首先新建一个名闻Ajax的asp.net web空应用程序,然后在里面新建一个ashx文件,就是一般处理程序

239

《QGIS快速入门与应用基础》021:插件仓库 URL 获取与添加

详细介绍了在QGIS中添加第三方插件仓库的方法。首先强调必须从官方推荐、开源社区等可靠渠道获取插件仓库URL以确保安全性,并列出了4类可信获取渠道。文章分步骤讲解了URL添加流程,包括打开插件管理器设置面板、填写仓库信息、刷新缓存验证等操作。针对常见问题如URL格式错误、连接失败等提供了具体解决方案。最后总结指出,成功添加第三方仓库后即可直接搜索安装各类专业插件,从而扩展QGIS功能边界。全文注重实操指导,特别适合需要安装行业专用插件的QGIS用户参考。

LuckyHanMo的博客 467

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

asp.net 接收POST传递变量的方法

先创建一个web窗体并命名为user,删除其他的只留这段就可以。多内容的后端就同理添加在添加DeterminePostBackModeUnvalidated().Get("a")DeterminePostBackModeUnvalidated().Get("a")是主要获取传出post的。

qwwewq111的博客 1817

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ASP.NET ScriptManager 帮助您实现 Web 应用程序的 AJAX 功能

msdn:  http://msdn.microsoft.com/zh-cn/magazine/cc163354.aspx 当今,网站的使用者可以像发布者那样,对网站的内容、发展方向及其成功承担责任。每天都会涌现出许多样式新颖的网站,如社交站点、博客、在线相册集和

sky1069的专栏 1216

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ASP.NET AJAX 在Web开发中的应用

摘 要 ASP.NET AJAX 实现了Web页面丰富的部分刷新效果。本文通过介绍AJAX原理,引申到ASP.NET AJAX原理,并总结了在Web 开发应用中要注意的若干问题。合理地利用ASP.NET AJAX技术,Web开发应用就能获得更好的交互效果。 关键词 ASP.NET AJAX Web开发 ASP.NET AJAX控件 1 引言 当前,Web技术的不断发展使得B/S得以广泛

Hello_World_wusu的专栏 1775
上一篇: 掌握Ajax 之 利用 DOM 进行 Web 响应
下一篇: 彻底解决ASP.net Request乱码问题
leeDotNET
博客等级 码龄20年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值