您的位置:首页 > 编程语言 > ASP

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

2017-09-13 21:58 288 查看


ASP.NET笔记


1. 一般处理程序


1. 1 一般处理程序初步

创建步骤:

创建ASP.NET空Web应用程序

添加-新建项-一般处理程序,命名为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;
       }
}
}


若要输出一个网页,代码如下:

context.Response.ContentType = "text/html";
context.Response.Write("<html><head></head><body><h1>你好ASP.NET</h1></body></html>");


输出一个文件(比如图片):

context.Response.ContentType = "image/jpg";//相对路径的image文件夹下
context.Response.WriteFile("dlf.jpg");


在代码编辑界面直接 右键-在浏览器中打开,便可将DemoHandler.ashx打开。


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

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

步骤:

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

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

<connectionStrings>
   <add name="personDb" connectionString="Data Source=HP002;Initial Catalog=wjb;Integrated Security=True"/>
</connectionStrings>


<%@ 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.2的代码中,拼接表格的时候增加一列(详见1.2中的代码):

"<td><a href='ShowDetail.ashx?id={0}'>详情</a></td>"


新建一个名为ShowDetail.ashx的一般处理程序

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

<table>
       @StrTrBody<!--这是一个占位符-->
</table>


然后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标签:"添加",点击跳转到添加页面,实现给表格添加新内容的功能

步骤:

新建一个名为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>


在ListHandler.ashx中拼接一个a标签,链接指向AddPersonInfo.html

<a href='AddPersonInfo.html'>添加</a>


新建一个名为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;
       }
   }
​
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: