一般处理程序,是学习ASP.NET非常关键的一步,后面WebForm、Ajax、服务器控件等等的学习都是建立在一般处理程序基础之上。一般处理程序真的是非常“麻烦”。但是最优的优点就是非常高效,执行代码相对于以后学习的WebForm就非常地迅捷,而且对于我们初学者非常有帮助,能够一步步地去了解网页到底是怎么在运行的,了解它的整个过程是怎么样的。
代码:public void ProcessRequest (HttpContext context) ,HttpContext context,这个参数,很是关键,参数里包含了浏览器发送过来的请求报文和服务器向浏览器发送的响应报文。
代码:context.Response.ContentType = "text/plain";,这行代码就是发给浏览器的响应报文中,说明响应报文中的内容是什么类型的,指示浏览器根据类型怎么去解析。
代码:context.Response.Write("Hello World");参数context中封装了获得请求报文的方法以及输出响应报文的方法;此行代码就是向浏览器输出字符串("Hello World"。
代码:public bool IsReusable表示是否重用,先不管这个了。
利用三层思想,进行增删查改操作,就明白了到底一般处理程序是干吗的?展示相框功能。照片列表、删除照片、增加照片、修改照片。
照片列表功能:
首先创建三层,这个可以自己手写,当然也可以利用代码生成器一系列工具进行协助,个人觉得数据型数据转换成对象型数据实在是太麻烦了,不过也可以属性对象的属性。这个因人而异。不过敲代码熟悉代码终归是好的。三层中的使用规范及一些注意点详见:学习三层架构感悟
当一般处理程序,也就是UI层需要使用业务层时,得到的是对象性数据,也就是实例化的类对象,方便操作嘛。然后就是拼接字符串。不过可以利用事先准备好的模板,然后在一般处理程序中获得字符串:
删除照片功能:
在照片列表中,增加一个点击删除的超链接,让其转向一个新的一般处理程序,然后在新的一般处理程序中进行照片删除功能,最后再返回到照片列表即可。关键点就是删除照片需要——主键,也就是照片Id,直接点击超链接,在超链接后面加上参数即可,然后在新的一般处理程序中获得超链接传过来的Id,之后就是三层的一步步实现即可。
同理,在照片列表,增加一个转向新的一般处理程序的超链接,然后显示需要输入的新照片的信息即可。只不过获取页面上文本框的内容是采用:
修改照片功能是最扣人心弦的。大致分为两步:第一步就是点击修改,向浏览器展示要修改照片的可修改的信息;第二步就是将修改好的内容进行数据库操作——更新数据库。
修改照片功能关键就是如何让修改的一般处理程序区分是第一步还是第二步。这里就需要一个隐藏域的帮助:
新建一个一般处理程序:
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}
public bool IsReusable {
get {
return false;
}
}
}
代码:<%@ WebHandler Language="C#" Class="Handler" %>,告诉程序执行C#语言,Handler类。从这里可以看出,说白了一般处理程序也是类,只不过这个类有其特殊的地方。
代码:public void ProcessRequest (HttpContext context) ,类Handler实现了Handler接口,这个就是Handler不同于一般类的地方了,F12查看Handler接口,就明白了必须重写方法ProcessRequest。代码:public void ProcessRequest (HttpContext context) ,HttpContext context,这个参数,很是关键,参数里包含了浏览器发送过来的请求报文和服务器向浏览器发送的响应报文。
代码:context.Response.ContentType = "text/plain";,这行代码就是发给浏览器的响应报文中,说明响应报文中的内容是什么类型的,指示浏览器根据类型怎么去解析。
代码:context.Response.Write("Hello World");参数context中封装了获得请求报文的方法以及输出响应报文的方法;此行代码就是向浏览器输出字符串("Hello World"。
代码:public bool IsReusable表示是否重用,先不管这个了。
利用三层思想,进行增删查改操作,就明白了到底一般处理程序是干吗的?展示相框功能。照片列表、删除照片、增加照片、修改照片。
照片列表功能:
首先创建三层,这个可以自己手写,当然也可以利用代码生成器一系列工具进行协助,个人觉得数据型数据转换成对象型数据实在是太麻烦了,不过也可以属性对象的属性。这个因人而异。不过敲代码熟悉代码终归是好的。三层中的使用规范及一些注意点详见:学习三层架构感悟
当一般处理程序,也就是UI层需要使用业务层时,得到的是对象性数据,也就是实例化的类对象,方便操作嘛。然后就是拼接字符串。不过可以利用事先准备好的模板,然后在一般处理程序中获得字符串:
//根据虚拟路径,获得物理路径
string phyPath = System.Web.HttpContext.Current.Server.MapPath(path);
//根据物理路径,获取全部文本
string strHTML=System.IO.File.ReadAllText(phyPath);
照片列表首先制作表格的表头,然后遍历对象型数据,制作成每一行,最后输出到浏览器即可。
删除照片功能:
在照片列表中,增加一个点击删除的超链接,让其转向一个新的一般处理程序,然后在新的一般处理程序中进行照片删除功能,最后再返回到照片列表即可。关键点就是删除照片需要——主键,也就是照片Id,直接点击超链接,在超链接后面加上参数即可,然后在新的一般处理程序中获得超链接传过来的Id,之后就是三层的一步步实现即可。
//从url中获得要删除的照片Id号
string strId=context.Request.QueryString["id"];
增加照片功能:
同理,在照片列表,增加一个转向新的一般处理程序的超链接,然后显示需要输入的新照片的信息即可。只不过获取页面上文本框的内容是采用:
//获取添加照片的描述信息
photo.PTitle= context.Request.Form["txtName"];
//获得添加照片的路径信息
photo.PUrl = context.Request.Form["txtUrl"];
修改照片功能:
修改照片功能是最扣人心弦的。大致分为两步:第一步就是点击修改,向浏览器展示要修改照片的可修改的信息;第二步就是将修改好的内容进行数据库操作——更新数据库。
修改照片功能关键就是如何让修改的一般处理程序区分是第一步还是第二步。这里就需要一个隐藏域的帮助:
隐藏域一方面可以判断是否是第一次请求修改的一般处理程序,其次可以将第二步要进行修改时需要的Id放到隐藏域中,因为第二步是修改页面请求修改页面,此时无法再向第一步一样,通过Url地址,获得地址中的参数的Id值。执行完第一步后,将要修改的Id放到隐藏域中,就方便第二步开展。
备注:写于2013年8月23日