<%@ 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;
}
}
}