第十节 4基于ashx方式的ASP.Net开发

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

}

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值