ASP.NET笔记(一)——一般处理程序

来源:互联网 发布:杀肖数据统计资料区 编辑:程序博客网 时间:2024/06/05 02:32

ASP.NET笔记

1. 一般处理程序

1. 1 一般处理程序初步

  • 创建步骤:

    1. 创建ASP.NET空Web应用程序

    2. 添加-新建项-一般处理程序,命名为DemoHandler.ashx,结果如下:

      <%@ WebHandler Language="C#" Class="DemoHandler" %>using System;using System.Web;public class DemoHandler : IHttpHandler {      public void ProcessRequest (HttpContext context) {       //给前端浏览器输出字符串        context.Response.ContentType = "text/plain";      //字符串的内容为"Hello World"        context.Response.Write("Hello World");       }    public bool IsReusable {        get {            return false;        }  }}
    3. 若要输出一个网页,代码如下:

      context.Response.ContentType = "text/html";context.Response.Write("<html><head></head><body><h1>你好ASP.NET</h1></body></html>");
    4. 输出一个文件(比如图片):

      context.Response.ContentType = "image/jpg";//相对路径的image文件夹下context.Response.WriteFile("dlf.jpg");
    5. 在代码编辑界面直接 右键-在浏览器中打开,便可将DemoHandler.ashx打开。

1.2 一般处理程序制作列表页

  • 目的:将数据库中的某个表展示在浏览器上

  • 步骤:

    1. 添加-新建项-一般处理程序,命名为ListHandler.ashx

    2. 编辑配置文件Web.config,配置数据库连接字符串:

      <connectionStrings>    <add name="personDb" connectionString="Data Source=HP002;Initial Catalog=wjb;Integrated Security=True"/>  </connectionStrings>
    3. <%@ WebHandler Language="C#" Class="ListHandler" %>using System;using System.Configuration;using System.Data.SqlClient;using System.Text;using System.Web;public class ListHandler : IHttpHandler {    public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/html";//显示内容为HTML              //使用StringBuilder拼接处html页面的各个标签        StringBuilder sb = new StringBuilder();        sb.Append("<html>" +                  "<head></head>" +                  "<body>" +                  "<a href='AddPersonInfo.html'>添加</a><br/><br/>");        #region 拼接table                  //拼接表头        sb.Append("<table border=1>" +                  "<tr>" +                  "<th>ID</th>" +                  "<th>NAME</th>" +                  "<th>AGE</th>" +                  "<th>操作</th>"+                  "</tr>");        //读取数据库中的数据        string connStr = ConfigurationManager.ConnectionStrings["personDb"].ConnectionString;        using (SqlConnection conn = new SqlConnection(connStr))        {            conn.Open();            using (SqlCommand cmd = new SqlCommand("select  * from Tbl_Person2;", conn))            {                using (var reader = cmd.ExecuteReader())                {                    while (reader.Read())                    {                        //拼接字符串(每行的数据)                        sb.AppendFormat("<tr>" +                                        "<td>{0}</td>" +                                        "<td>{1}</td>" +                                        "<td>{2}</td>" +                                        "<td><a href='ShowDetail.ashx?id={0}'>详情</a></td>"+                                        "</tr>",                                        reader["id"],                                        reader["name"],                                        reader["age"]                                        );                                         }                }            }        }        sb.Append("</table>");        #endregion        sb.Append("</body></html>");        context.Response.Write(sb.ToString());//将html写进来    }    public bool IsReusable {        get {            return false;        }    }}

1.3 一般处理程序——详情

  • 目的:上面的表中增加一列,点击该列的td会显示该列数据的详细信息

  • 步骤:

    1. 在1.2的代码中,拼接表格的时候增加一列(详见1.2中的代码):

    "<td><a href='ShowDetail.ashx?id={0}'>详情</a></td>"
    1. 新建一个名为ShowDetail.ashx的一般处理程序

    2. 为了拼接html页面时少些代码,新建一个HTML页面作为模板,命名为ShowDetailTemp.html,在其body中添加如下代码:

      <table>        @StrTrBody<!--这是一个占位符--></table>
    3. 然后ShowDetail.ashx的代码如下:

      public class ShowDetail : IHttpHandler {    public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/html";        //首先要拿到当前id        string id= context.Request.QueryString["id"];//拿到ShowDetail.ashx?id=1 中的id        int nId=int.Parse(id);        string connStr = ConfigurationManager.ConnectionStrings["personDb"].ConnectionString;        string sql = "select * from Tbl_Person2 where id=@id";        StringBuilder sb=new StringBuilder();        using (SqlDataAdapter adapter=new SqlDataAdapter(sql,connStr))        {            //传递id参数            adapter.SelectCommand.Parameters.AddWithValue("@id", nId);                      //填充一个表格            DataTable dt=new DataTable();            adapter.Fill(dt);            sb.AppendFormat("<tr>" +                            "<td>id:</td>" +                            "<td>{0}</td>" +                            "</tr>",                            dt.Rows[0]["id"]);//id信息(第0行,名为id的列)            sb.AppendFormat("<tr>" +                            "<td>name:</td>" +                            "<td>{0}</td>" +                            "</tr>",                            dt.Rows[0]["name"]);//name信息            sb.AppendFormat("<tr>" +                            "<td>height:</td>" +                            "<td>{0}</td>" +                            "</tr>",                            dt.Rows[0]["height"]);//height信息            sb.AppendFormat("<tr>" +                            "<td>age:</td>" +                            "<td>{0}</td>" +                            "</tr>",                            dt.Rows[0]["age"]);//age信息            sb.AppendFormat("<tr>" +                            "<td>gender:</td>" +                            "<td>{0}</td>" +                            "</tr>",                            dt.Rows[0]["gender"]);//gender信息        }        //用File.ReadAllText()方法,把Html模板读出来,然后替换Html里的数据占位符        //把相对于网站根目录的路径转成磁盘上的绝对路径(reason:因为IO流只能识别绝对路径)        string path= context.Request.MapPath("/ShowDetailTemp.html");        string textTemp= File.ReadAllText(path);        string result= textTemp.Replace("@StrTrBody", sb.ToString());//替换掉占位符        context.Response.Write(result);            }    public bool IsReusable {        get {            return false;        }    }}

1.4 一般处理程序——添加

  • 目的:在ListHandler.ashx页面增加一个a标签:"添加",点击跳转到添加页面,实现给表格添加新内容的功能

  • 步骤:

    1. 新建一个名为AddPersonInfo.html的页面,里面有一个表单action="ProcessAdd.ashx":

      <body>    <form id="formAdd" action="ProcessAdd.ashx" method="get">        <table>                        <tr>                <td>姓名:</td>                <td>                    <input type="text" name="txtName"/>                </td>            </tr>            <tr>                <td>身高:</td>                <td>                    <input type="text" name="txtHeight"/>                </td>            </tr>            <tr>                <td>年龄:</td>                <td>                    <input type="text" name="txtAge"/>                </td>            </tr>            <tr>                <td>性别:</td>                <td>                    <input type="text" name="txtGender"/>                </td>            </tr>            <tr>                <td colspan="2">                    <input type="submit" value="添加" />                </td>            </tr>        </table>    </form></body>
    2. 在ListHandler.ashx中拼接一个a标签,链接指向AddPersonInfo.html

    <a href='AddPersonInfo.html'>添加</a>
    1. 新建一个名为ProcessAdd.ashx的一般处理程序,编写向表格增加内容的代码:

      <%@ WebHandler Language="C#" Class="ProcessAdd" %>using System;using System.Configuration;using System.Data;using System.Data.SqlClient;using System.Web;public class ProcessAdd : IHttpHandler {    public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/html";        //拿到提交来的数据        string txtName = context.Request.QueryString["txtName"];        string txtHeight = context.Request.QueryString["txtHeight"];        string txtAge =context.Request.QueryString["txtAge"];        string txtGender = context.Request.QueryString["txtGender"];        //接下来到数据库进行插入操作        string connStr = ConfigurationManager.ConnectionStrings["personDb"].ConnectionString;        string sql = "insert into Tbl_Person2 values(@name,@height,@age,@gender)";        using (SqlConnection conn=new SqlConnection(connStr))        {            using (SqlCommand cmd=new SqlCommand(sql,conn))            {                conn.Open();                cmd.Parameters.AddRange(new SqlParameter[]                 {                    new SqlParameter("name",SqlDbType.VarChar,50) {Value = txtName},                    new SqlParameter("height",SqlDbType.Int) {Value = txtHeight},                    new SqlParameter("age",SqlDbType.Int) {Value = txtAge},                    new SqlParameter("gender",SqlDbType.VarChar,50) {Value = txtGender}                 });                cmd.ExecuteNonQuery();            }        }        //插入数据成功之后,跳转到起始页ListHandler.ashx        context.Response.Redirect("ListHandler.ashx");    }    public bool IsReusable {        get {            return false;        }    }}

原创粉丝点击