• 第十节 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;
            }
        }
    
    }
    

      

  • 相关阅读:
    mysql 中 group_concat()用法
    MySQL行转列与列转行
    mysql中find_in_set()函数的使用(转载)
    多线程中的线程安全关键字
    架构师的特征
    算法复杂度的定义
    1.ArrayList和linkedList区别
    Plsql查询clob类型字段数据
    数据库的特性与隔离级别和spring事务的传播机制和隔离级别
    java中的线程
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2405322.html
Copyright © 2020-2023  润新知