问题来源:

今天在敲一个小的demo,利用Jquery实现级联下拉框,敲的过程中发现不管怎么和源代码对比都无法显示想要的功能。

这才想着原来是没有写后台代码,询问一清同学的时候,他告诉我能够利用ASP.NET的一般处理程序。

我果然是菜鸟刚開始学习的人,由于我还没有接触过一般处理程序。

什么是一般处理程序:

一般处理程序:是一个实现System.Web.IHttpHandler接口的特殊类。不论什么一个实现了IHttpHandler接口的类。是作为一个外部请求的目标程序的前提。

(凡是没有实现此接口的类,就不能被浏览器请求。)它由支持ASP.NET的server调用和启动执行。 一个HttpHandler程序负责处理它所相应的一个或一组URL地址的訪问请求,并接收client发出的訪问请求信息(请求报文)和产生响应内容(响应报文)。

长处:轻量化、效率较高

创建一个一般处理程序将会生成两个后缀名的文件.ashx和.ashx.cs。ashx里仅仅有一个指令集。没有不论什么其它代码;ashx.cs就是页面处理代码。假设有大量html。须要通过ashx来拼接字符串或读取模板的方式完毕。

当中.ashx.cs相应的内容,例如以下面代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace web
  7. {
  8. /// <summary>
  9. /// Handler 的摘要说明
  10. /// </summary>
  11. public class Handler : IHttpHandler
  12. {
  13. public void ProcessRequest(HttpContext context)
  14. {
  15. context.Response.ContentType = "text/plain"; //表示输出结果类型
  16. context.Response.Write("Hello World"); //输出结果
  17. }
  18.  
  19. public bool IsReusable
  20. {
  21. get
  22. {
  23. return false;
  24. }
  25. }
  26. }
  27. }

(1)HttpContext: 请求上下文对象,包括:请求报文对象(HttpRequest),响应报文对象(HttpResponse),server帮助类(Server),Session等。

(2)FrameWork在接收到请求后,通过反射技术创建请求路径相应的类的对象,并强制转换成IHttpHandler接口对象(HttpHandler实现了IHttpHandler,之后的转换相当于将子类强转为父类)。统一调用ProcessRequest方法处理。

(3)IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否可以将这个Handler存入池中以便重用。

(4)ContentTyp属性是一般处理程序输出响应内容,输出的内容有可能是图片、html等其它页面,浏览器依据响应报文体内容不知道接收到的是什么,须要推断响应报文头里的ContentType来决定将报文体内容作为何种格式的数据来显示。(image/jpeg----表示输出的是图片,text/plain--------表示输出文本)

从上面的代码能够看到,一般处理程序实际上就是一个实现IHttpHandler接口的处理程序类,这个处理程序被ASP.NET直接在系统配置文件映射到了ashx扩展名的请求上。这样。我们就不须要在配置文件里进行配置了。

详细的用途:

HttpHandler程序能够完毕普通类程序所能完毕的大多数任务:

1.获取client通过HTML的Form表单提交的数据和URL參数

2.创建对client的响应消息内容

3.訪问server端的文件系统

4.连接数据库并开发基于数据库的应用

5.调用其它类

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace web
  7. {
  8. /// <summary>
  9. /// Handler 的摘要说明
  10. /// </summary>
  11. public class Handler : IHttpHandler
  12. {
  13. public void ProcessRequest(HttpContext context)
  14. {
  15. context.Response.ContentType = "text/plain"; //表示输出结果类型
  16. context.Response.Write("Hello World"); //输出结果
  17. }
  18.  
  19. public bool IsReusable
  20. {
  21. get
  22. {
  23. return false;
  24. }
  25. }
  26. }
  27. }

 详细的运用:

以下是利用Jquery实现级联下拉框效果中。须要用一般处理程序获得汽车类型的一般处理程序的代码。

  1. public class Handler1 : IHttpHandler
  2. {
  3. public void ProcessRequest(HttpContext context)
  4. {
  5. context.Response.ContentType = "text/plain";
  6. string strCarName =context.Request["carnameValue"].ToString();
  7.  
  8. SqlConnection conn = new SqlConnection("server=.;database=car;uid=sa;pwd=123456;"); //定义连接字符串
  9. conn.Open(); //打开连接
  10. SqlDataAdapter sdr = new SqlDataAdapter();
  11. sdr.SelectCommand =new SqlCommand ("selectid,cartype from t_cartype where carnameid='" + strCarName + "'",conn);
  12.  
  13. DataTable dt = new DataTable();
  14.  
  15. sdr.Fill(dt);
  16. string str =DataTableToJson("1", dt);
  17. context.Response.Write(str);
  18. }
  19.  
  20. public bool IsReusable
  21. {
  22. get
  23. {
  24. return false;
  25. }
  26. }
  27. }

总结:

事实上理论知识再好不会用也仅仅会停留在理论层面。而编程又是这么奇怪的一个东西不管别人讲得多么的具体,都比不上自己的一次实践。

文中所提到的demo源代码,文章最后会附有下载链接。

demo源代码下载:http://download.csdn.net/detail/senior_lee/7697243

初识ASP.NET---一般处理程序的更多相关文章

  1. .net core系列之初识asp.net core

    .net core已经发布了2.0版本,相对于1.0的有了很大的完善,最近准备在项目中尝试使用asp.net core,所以就进行了一些简单的研究. 初识asp.net core分为以下几个部分: 1 ...

  2. ASP.NET -- 一般处理程序ashx

    ASP.NET  --   一般处理程序ashx 如果在一个html页面向服务器端请求数据,可用ashx作为后台页面处理数据.ashx适合用作数据后台处理,相当于WebForm中的aspx.cs文件或 ...

  3. asp.net中处理程序调用HttpContext.Current.Session获取值出错

    asp.net中处理程序调用System.Web.HttpContext.Current.Session获取Session时提示错误:未将对象引用设置到对象的实例. 解决办法:在处理程序文件类中实现I ...

  4. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  5. 初识ASP.NET 5中的Sake与KoreBuild

    从github上签出基于ASP.NET 5的MVC 6的源代码进行编译,发现有2个编译命令: build.cmd是针对Windows的编译命令,build.sh是针对Mac/Linux的编译命令,这本 ...

  6. 初识 Asp.Net内置对象之Server对象

    Server对象 Server对象定义了一个于Web服务器相关联的类提供对服务器上的方法和属性的访问,用于访问服务器上的资源. Server对象的常用属性 属性   MarhineName 获取服务器 ...

  7. asp.net一般处理程序利用反射定位方法

    asp.net的一般处理程序我想大家用得都不少,经常会如下如下的代码: using System; using System.Collections.Generic; using System.Lin ...

  8. asp.net 一般处理程序接收上传文件的问题

    在使用Html+ashx处理文件上传时,遇到上传文件超过4M的问题,首先HTML代码如下: <!DOCTYPE html> <html> <head> <me ...

  9. asp.net ashx处理程序中switch case的替代方案总结

    目录 1.用委托字典代替switch...case; 2.利用反射替代switch...case: 3.比较两种方案 4.其他方案 4.说明 5.参考 在开发 asp.net 项目中,通常使用一般处理 ...

随机推荐

  1. 【BZOJ2762】[JLOI2011]不等式组(树状数组)

    题目: BZOJ2762 分析: 加入的不等式分三种情况 当\(a>0\),可以变成\(x>\lfloor \frac{c-b}{a}\rfloor\) 当\(a=0\),若\(b> ...

  2. 【BZOJ2565】最长双回文串 (Manacher算法)

    题目: BZOJ2565 分析: 首先看到回文串,肯定能想到Manacher算法.下文中字符串\(s\)是输入的字符串\(str\)在Manacher算法中添加了字符'#'后的字符串 (构造方式如下) ...

  3. 关于DOM操作的相关案例

    1.模态框案例 需求: 打开网页时有一个普通的按钮,点击当前按钮显示一个背景图,中心并弹出一个弹出框,点击X的时候会关闭当前的模态框 代码如下: <!DOCTYPE html> <h ...

  4. ACM_3n+1问题(克拉兹问题+线段树区间查询最大值)

    3n+1问题 Time Limit: 2000/1000ms (Java/Others) Problem Description: 考虑如下的序列生成算法:从整数n开始,如果n是偶数,把它除以2:如果 ...

  5. Linux添加用户组和删除用户组

    1.添加用户组使用groupadd命令添加用户组:groupadd group_name此操作需由系统管理员进行.2.删除用户组使用groupdel命令删除用户组:groupdel group_nam ...

  6. java中使用String的replace方法替换html模板保存文件

    在我们的D盘下有这样一个html模板,现在我们要做的就是解析news.template文件,从数据库中提取数据将数据添加到指定的模板位置上 <head> <title>{tit ...

  7. 实现div毛玻璃背景

    毛玻璃效果 ios里毛玻璃效果的使用非常多,本文介绍一个实现div毛玻璃背景的方法 CSS3 Filter CSS3的Filter主要用在图像的特效处理上,默认值为none,还有以下备选项:   1. ...

  8. Codeforces_738B

    B. Spotlights time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  9. block要用copy修饰,还是用strong

    栈区与堆区 block本身是像对象一样可以retain,和release.但是,block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上.他本身的作于域是属于创建时候的作用 ...

  10. ie9以下提示用户升级浏览器

    <!--[if lt IE 9]> <div style='border: 4px solid #FFF500; background: #FDFDC8; text-align: c ...