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.表格样式
随机推荐
- 开启VS的JavaScript调试
前提条件,设置我们的IE 去掉勾,即启用调试然后再JS代码片段中输入debugger.注意:如果IE开启了F12调试面板, VS是不会捕获JS代码片段中的debugger断点.
- [SinGuLaRiTy] 数论题目复习
[SinGuLaRiTy-1020] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [CQBZOJ 1464] Hankson 题目描述 H ...
- 基本css拼图形
关闭按钮: <em class="close"></em> .close { width: 16px; height: 16px; text-align: ...
- 状压DP【洛谷P1896】 [SCOI2005]互不侵犯
P1896 [SCOI2005]互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...
- 2.Valid Parentheses (括号匹配)
Level: Easy 题目描述: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...
- [USACO18JAN]Cow at Large G(树形DP)
P4186 [USACO18JAN]Cow at Large G(树形DP) Luogu4186 设dp[i]表示i点需要放多少个农民.则有 \(if(near[i]-dep[i]<=dep[i ...
- 最长上升子序列问题(O(n^2)算法)
[题目描述] 给定N个数,求这N个数的最长上升子序列的长度. [样例输入] 7 2 5 3 4 1 7 6 [样例输出] 4 什么是最长上升子序列? 就是给你一个序列,请你在其中求出一段不断严格上升的 ...
- dedecms 的采集
http://www.360doc.com/content/14/0521/09/13870710_379547377.shtml http://www.360doc.com/content/14/0 ...
- A. Cinema Line
A. Cinema Line time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Java 初始化和清理
初始化和清理是影响代码安全的两个重要因素. 一.初始化 1. 方法重载 构造器与类名相同,成为强制重载方法名的原因之一.重载规则:每个重载的方法必须拥有独一无二的参数类型列表.不能根据返回值来区分重载 ...