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

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

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ASP.NET MVC 一般处理程序(General Handler),也称为 ashx 文件,是一种在 ASP.NET MVC 中用于处理特定请求的一种方式。 ASP.NET MVC 一般处理程序继承自 IHttpHandler 接口,它主要用于处理静态文件或非标准的请求。与控制器不同,一般处理程序不需要路由或视图,它直接接受请求并返回处理结果。 一般处理程序在项目中以 .ashx 的文件形式存在,可以在其中实现一些自定义的处理逻辑。可以通过在 Global.asax 文件中注册路由来映射一般处理程序的请求。 与控制器相比,一般处理程序更轻量级,更适合处理一些简单的请求,如文件下载、图片验证码生成等。它使用起来更加灵活,并且性能也更好。 使用一般处理程序的步骤如下: 1. 在项目中创建一个 .ashx 文件。 2. 实现一般处理程序的逻辑,可以通过实现 ProcessRequest 方法来处理请求,同时还可以通过实现 IRequiresSessionState 接口来访问会话状态。 3. 在 Global.asax 文件中注册一般处理程序的路由,指定请求的 URL 模式和对应的一般处理程序类名。 4. 在浏览器中访问对应的 URL,即可触发一般处理程序的逻辑,并返回处理结果。 总之,ASP.NET MVC 一般处理程序是一种用于处理特定请求的方式,它比控制器更轻量级、更灵活,适合处理一些简单的请求。我们可以通过创建一般处理程序文件,实现自定义逻辑,并在 Global.asax 文件中注册路由来使用一般处理程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值