ASP.NET WebForm 之 Ajax 请求后端处理
概述
ASP.NET MVC中的异步用途非常广泛,操作起来也非常简单。前台请求异步请求 Controller下的Action 方法,后端返回ActionResult 即可。但是在ASP.NET WebForm中使用异步就比较麻烦,下面介绍两种处理WebForm异步请求的形式。若前端Ajax异步请求不熟悉的请参考:http://www.w3school.com.cn/jquery/ajax_ajax.asp
通过一般处理程序的形式处理异步请求
1.新建一个WebForm 窗体

2.创建表单元素

<body>
<div>
用户名:<input type="text" id="name"><br />
密 码:<input type="text" id="pwd" />
</div>
<div>
<input type="button" value="提交" onclick="javascript:submit();" />
</div>
</body>

3.新建一个一般处理程序

4.前台点击 "提交" 按钮 往后台异步请求,并弹出后台返回的文本数据。

1 <script type="text/javascript">
2 var submit = function () {
3 var name = $("#name").val();
4 var pwd = $("#pwd").val();
5 $.ajax({
6 url: "WebFormAjaxDemo.ashx",
7 type: "post",
8 data: { "name": name, "pwd": pwd, "requestMethod": "register" },
9 dataType: "text",
10 async: false,
11 beforeSend: function (XHR) {
12 },
13 complete: function (XHR, TS) {
14 },
15 success: function (data) {
16 alert(data);
17 }
18
19 });
20 };
21 </script>

5.后台处理前台发送的请求,并返回处理的结果。

1 public void ProcessRequest(HttpContext context)
2 {
3 // 接收前台要请求的方法
4 string requestMethod = context.Request["requestMethod"];
5
6 // 存储返回结果
7 string returnResult = string.Empty;
8 // 这种方式可以处理前台的多种异步请求
9 switch (requestMethod)
10 {
11 case "register":
12 {
13 returnResult = Register();
14 } break;
15 default:
16 { returnResult = "no method"; } break;
17
18 }
19 // 返回处理结果
20 context.Response.Write(returnResult);
21 }


1 /// <summary>
2 /// 注册
3 /// </summary>
4 /// <returns></returns>
5 public string Register()
6 {
7 // 获取表单数据
8 var name = HttpContext.Current.Request["name"];
9 var pwd = HttpContext.Current.Request["pwd"];
10
11 if (pwd == "123")
12 {
13 return "ok";
14 }
15 return "no";
16 }

6.测试异步请求
6.1

6.2

通过访问WebForm 页面的后端代码处理异步请求(CodeBehind),而不需要重新创建页面。(和上面的操作类似,只要稍改动下)
1.修改前台异步请求访问的路径

1 <script type="text/javascript">
2 var submit = function () {
3 var name = $("#name").val();
4 var pwd = $("#pwd").val();
5 $.ajax({
6 url: "WebFormAjaxDemo.aspx",
7 type: "post",
8 data: { "name": name, "pwd": pwd, "requestMethod": "register" },
9 dataType: "text",
10 async: false,
11 beforeSend: function (XHR) {
12 },
13 complete: function (XHR, TS) {
14 },
15 success: function (data) {
16 alert(data);
17 }
18
19 });
20 };
21 </script>

2.当前页面的后端处理


1 protected void Page_Load(object sender, EventArgs e)
2 {
3 // 判断是否有异步请求过来(不能用 isPostBack 判断 【ispostback结果是根据隐藏域是否为空判断的】)
4 if (!string.IsNullOrEmpty(Request["requestMethod"]))
5 {
6 string returnResult = string.Empty;
7 switch (Request["requestMethod"]) // 请求的方法
8 {
9 case "register":
10 {
11 returnResult = Register();
12 } break;
13 default:
14 { returnResult = "no method"; } break;
15 }
16 Response.Write(returnResult);
17 Response.End(); // 结束输出流,否则会包含整个页面
18 }
19 }


1 /// <summary>
2 /// 注册
3 /// </summary>
4 /// <returns></returns>
5 public string Register()
6 {
7 var name = HttpContext.Current.Request["name"];
8 var pwd = HttpContext.Current.Request["pwd"];
9
10 if (pwd == "123")
11 {
12 return "ok";
13 }
14 return "no";
15 }

3.测试结果
3.1

3.2

总结
通过"一般处理程序"处理WebForm 前台的异步请求,效率要比通过CodeBehind 的形式高,因为一般处理程序要少走了页面生命周期(创建控件树、页面初始化、处理viewstate、load......),但是几乎每个前台页面要处理异步请求都要新建一个一般处理程序,使得项目中文件太多。
通过codeBehind的形式,可以让当前的前台提交给自己的后台类去处理,虽然效率要低很多,但是使得页面比较整洁。通过codeBehind 的形式处理异步请求的关键在于往输出流输出数据后要Response.End 结束输出,不然就会Load页面了。
ASP.NET WebForm 之 Ajax 请求后端处理的更多相关文章
- asp.net mvc 使用ajax请求 控制器 (PartialViewResult)分部的action,得到一个分部视图(PartialView)的HTML,进行渲染
在asp.net mvc 使用ajax请求获取数据的时候,我们一般是返回json或者xml,然后解析这些数据进行渲染,这样会比较麻烦,可以请求一个 分部action,返回一个分部视图 直接可以渲染,不 ...
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
C# 动态创建SQL数据库(二) 使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...
- ASP.NET WebForm中异步请求防止XSRF攻击的方法
在ASP.NET MVC中微软已经提供了如何防止跨域攻击的方法.对于传统Webfrom中使用Handler来接受ajax的Post请求数据,如何来防止XSRF攻击呢.这里给大家提供一个简单地方法,和M ...
- ASP.NET easyUI--datagrid 通过ajax请求ASP.NET后台数据的分页查询
js前台对datagrid的定义代码,如下 mygrid = $('#mytable').datagrid({ fit: true, //自动大小 height: 'auto', rownumbers ...
- 解决Django中在.js文件中用ajax请求后端,找不到CSRF问题
function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != ...
- WebForm 页面ajax 请求后台页面 方法
function ReturnOperation(InventoryID) { //入库 接口 if (confirm('你确认?')) { $.ajax({ type: "post&quo ...
- 使用ajax请求后端程序时,关于目标程序路径问题
这里涉及到和PHP中类似的问题,有待更新!!!
- phpStudy4——前端页面使用Ajax请求并解析php返回的json数据
项目需求: 在html页面显示所有用户列表信息. 需求分析: 1. html页面使用ajax向后端php请求用户数据 2. php脚本查询数据库,并将查询后的结果以json格式返回前端html页面 3 ...
- jQuery获取表格隐藏域与ajax请求数据结合显示详情
0.表格样式
随机推荐
- UIDevice
iOS 的 APP 应用开发的过程中,有时为了 bug 跟踪或者获取用反馈的需要自动收集用户设备.系统信息.应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发 api ...
- 【bzoj3209】: 花神的数论题 数论-DP
[bzoj3209]: 花神的数论题 首先二进制数中1的个数最多就是64个 设所有<=n的数里二进制中1的个数为i的有a[i]个 那么答案就是 然后快速幂 求a[i]可以用DP 设在二进制中从 ...
- [BZOJ1799][Ahoi2009]self 同类分布(数位dp)
题目描述 给出两个数 a,ba,b ,求出 [a,b][a,b] 中各位数字之和能整除原数的数的个数. 输入输出格式 输入格式: 一行,两个整数 aa 和 bb 输出格式: 一个整数,表示答案 输入输 ...
- js中 关于DOM的事件操作
一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象 ...
- window下 mysql密码忘记
1.打开MySQL配置文件 my.ini中,添加上skip-grant-tables,可以添加到文件的末尾或者是这添加到[mysqld]的下面. 2.重启mysql 3.这时登录MySQL不再需要验证 ...
- iOS开发小工具
基本上在Mac Appstore里面都有,很多是免费的.因为某种原因要重装Mac系统(这么多年来首次重装Mac系统),特意整理了下备忘. 1.AppIcon: 可以瞬间把图片转换为应用所需要的Icon ...
- flask 坑
no python application found, check your startup logs for errors 日志里面报类似于“Mon Mar 23 10:26:49 2015 – ...
- mysql 字段类型VARCHAR转换成DECIMAL
在我们写代码的实际业务中,有时候实体类用的是String,数据库中自然是VARCHAR类型,但是如果这个实体的属性值放的是数字类型,你查询的时候又需要对它进行排序.sql怎么写呢. 别担心mysql提 ...
- 需要提升权限才能运行dism
利用系统安装盘来安装.net3.5时,遇到的问题. [命令] dism.exe /online /enable-feature /featurename:NetFX3 /Source:F:\sourc ...
- Go语言基础之13--线程安全及互斥锁和读写锁
一.线程安全介绍 1.1 现实例子 A. 多个goroutine同时操作一个资源,这个资源又叫临界区 B. 现实生活中的十字路口,通过红路灯实现线程安全 C. 火车上的厕所(进去之后先加锁,在上厕所, ...