<%@ WebHandler Language="C#" Class="Hello1" %> using System; using System.Web; public class Hello1 : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; //表示响应的数据是html数据 //context.Response.Write("Hello World"); string username = context.Request["username"];//取得用户提交过来的name为UserName的表单的值 //实现假像在当前页面提交 context.Response.Write("<form action=\"Hello1.ashx\">姓名: <input type=\"text\" name=\"username\" value='"+username+"'/><input type=\"submit\" value=\"提 交\"/></form>"); context.Response.Write("Hello World"); context.Response.Write(username); //将字符串写回到浏览器 } public bool IsReusable { get { return false; } } }
<%@ WebHandler Language="C#" Class="Hello2" %> /* "返回"提交而面改进版 * 为了请求,返回的内容一样,将页面保存为一个html模板文件,模板中有一些待填值的占位符,第一次进行页面的时候就直接访问ashx,读取html模板,将待填值占位各个领域设置为空,然后输出到浏览器 * * 为了区分是第一次直接进入页面还是点击提交以后重新进入ashx,在form中增加一个隐藏字段 * <input type="hidde" name="ispostback" value="true"> 如果能够从Request中读取到ispostback=true就说明是点击提交以后重新进入ashx,否则就是第一次进入ashx * * ASP.net将web虚拟路径("/images/1.jpg")转换为磁盘全路径(d:/www/mysite/images/1.jpg)的方法是 * HttpContext.Current.Request.MapPath("/1/入让2.htm"); * * 实现思路: 在ProcessRequest中首先从Request中读取ispostback,如果读取到true,说明是提交进入的,就加载模板 * 并且进行占位符用计算后的值替换,否则就将模板中的占位符清空直接输出给浏览器,代码 * * 刚进入hello2.ashx的时候是直接向浏览器输出内容,用户在输出的内容中填入数值,再点击提交,服务器就知道"提交回来了" * * 文本框上次输入的值在提交表单后又显示出来并不是理所当然的,是开发人员帮着读取提交上来的值后渲染上去的,这就是aps.net中aspx和cs的关系,用户aspx重写这个程序,使用ispostback等属性,对比 * * Get与Post * 还可以设定form的method属性指定表单提交方式,get(默认值)是通过url传递表单值,post传递的表单值是隐藏到http报文中,url中看到不 * get和post的区别: get是通过url传递表单值,post通过url看不到表单域的值: * get传递的数据量是有限的,如果要传递大数据量不能用get,比如type="file"上传文件,type="password"传递密码或者重新提交表单的问题,get则没有 * * Get方式Url数据格式样,服务端文件名后跟着? 由于客户端可能向服务器端提交多个键值对,键值对之间用"&"进行分割,如果URL中没有汉字,特殊符号等,则需要对URL进行编码 * * */ using System; using System.Web; public class Hello2 : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; //context.Response.Write("Hello World"); string fillpath = context.Server.MapPath("Hello2.htm"); //提到文件的全路径 string content = System.IO.File.ReadAllText(fillpath); //读取文件 context.Response.Write(content); //定入到页面上 string username = context.Request["username"]; //如果提交了UserName这个参数则说明是提交表单进来的 if (string.IsNullOrEmpty(username)) { context.Response.Write("直接进入"); } else { context.Response.Write("提交进入"); } } public bool IsReusable { get { return false; } } }