1. 程式人生 > >asp.net初學習實現簡單的增刪改查功能

asp.net初學習實現簡單的增刪改查功能

在學習中發現網頁模板可以大大節約重複的頁面程式碼,同時對於WebSite開發的程式在不同的頁面直接呼叫已寫好的程式碼既不方面,只是作為程式碼量不大的程式進行開發還是比較方便。

    get和post的區別get是通過url傳遞表單值,post通過url看不到表單域的值;get傳遞的資料量是有限的,如果要傳遞大資料量不能用get,比如上傳文章、傳遞密碼或者<textarea>發表大段文章,post則沒有這個限制;post會有瀏覽器提示重新提交表單的問題。也就是說get和post都是以不同的方式提交表單的資訊,只是方式不一樣,post是以頭報文的形式傳遞,我們可以使用火狐的免費外掛firebug或者免費的httpwatch(破解版的當然免費),看到這些。

    簡單的說瀏覽器和伺服器直接就是請求和迴應,內部的具體細節可以看看部落格園中的很多示例圖,當然我們可以分析一下,就是瀏覽器通過DNS解析後向伺服器傳送請求,服務端偵聽到客戶端(瀏覽器)請求,開始分配相應套接字並建立連線,之後就是一方傳送一方接收回應的過程,這裡面存在一個長連線短連線的概念,具體還是查資料,這裡就不多說了。

    現在我們先來分析一下已經生成好的web程式,我們來反編譯看下具體的執行過程。

我們只看其中關鍵的部分,也是我們一般程式中的主體部分,使用reflector

複製程式碼
 1 [CompilerGlobalScope]
 2 public class default_aspx : _Default, IHttpHandler
3 { 4 // Fields 5 private static object __fileDependencies; 6 private static bool __initialized; 7 8 // Methods 9 [DebuggerNonUserCode] 10 public default_aspx(); 11 [DebuggerNonUserCode] 12 private HtmlHead __BuildControl__control2(); 13 [DebuggerNonUserCode] 14
private HtmlTitle __BuildControl__control3(); 15 [DebuggerNonUserCode] 16 private HtmlForm __BuildControlform1(); 17 [DebuggerNonUserCode] 18 private void __BuildControlTree(default_aspx __ctrl); 19 [DebuggerNonUserCode] 20 protected override void FrameworkInitialize(); 21 [DebuggerNonUserCode] 22 public override int GetTypeHashCode(); 23 [DebuggerNonUserCode] 24 public override void ProcessRequest(HttpContext context); 25 } 26 27 28 Expand Methods 29
複製程式碼

它對應的原始碼如下:

複製程式碼
 1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 2 
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml">
 6 <head runat="server">
 7     <title>測試</title>
 8 </head>
 9 <body>
10     <form id="form1" runat="server">
11     <div>
12     
13     </div>
14     </form>
15 </body>
16 </html>
複製程式碼

現在我們再來看關鍵的部分:

複製程式碼
 1 [DebuggerNonUserCode]
 2 private void __BuildControlTree(default_aspx __ctrl)
 3 {
 4     this.InitializeCulture();
 5     IParserAccessor accessor = __ctrl;
 6     accessor.AddParsedSubObject(new LiteralControl("\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n"));
 7     HtmlHead head = this.__BuildControl__control2();
 8     accessor.AddParsedSubObject(head);
 9     accessor.AddParsedSubObject(new LiteralControl("\r\n<body>\r\n    "));
10     HtmlForm form = this.__BuildControlform1();
11     accessor.AddParsedSubObject(form);
12     accessor.AddParsedSubObject(new LiteralControl("\r\n</body>\r\n</html>\r\n"));
13 }
複製程式碼

從上面可以看出,.NET執行時將html建立成一個樹物件,而後已以建立節點物件模型

複製程式碼
1 [DebuggerNonUserCode]
2 private HtmlTitle __BuildControl__control3()
3 {
4     HtmlTitle title = new HtmlTitle();
5     IParserAccessor accessor = title;
6     accessor.AddParsedSubObject(new LiteralControl("測試"));
7     return title;
8 }
複製程式碼

這裡我只是讓大家能看到 <title>測試</title>的效果,具體的可以自己看看。

下面就寫個小程式碼試下手感受下asp.net web開發,基本原理都差不多隻是對於剛從Winform轉過來的同學感覺上很繁瑣,節約時間不多說了,直接上程式碼,程式碼簡單就是為了自己熟悉測試的

複製程式碼
 1 <%@ WebHandler Language="C#" Class="List" %>
 2 
 3 using System;
 4 using System.Web;
 5 using System.Data;
 6 using System.Data.SqlClient;
 7 
 8 public class List : IHttpHandler {
 9     
10     public void ProcessRequest (HttpContext context) {
11         context.Response.ContentType = "text/html";
12         DataTable dt = SqlHelper.ExecuteDataTble();
13         System.Text.StringBuilder sb = new System.Text.StringBuilder();
14         foreach (DataRow dr in dt.Rows)
15         {
16             sb.AppendLine(" <tr>");
17             sb.AppendLine("<td>" + dr["s_no"] + "</td>");
18             sb.AppendLine("<td>" + dr["s_name"] + "</td>");
19             sb.AppendLine("<td>" + dr["s_sex"] + "</td>");
20             sb.AppendLine("<td>" + dr["s_birthday"] + "</td>");
21             sb.AppendLine("<td>" + dr["s_avgrade"] + "</td>");
22             sb.AppendLine("<td>" + dr["s_dept"] + "</td>");
23             sb.AppendLine("<td><a href=del.ashx?id="+dr["s_no"]+">刪除</td>");
24             sb.AppendLine("<td><input type='checkbox' name='ckdel' value= '"+ dr["s_no"]+"'/>選擇</td>");
25             sb.AppendLine("<td><a href='UpdateRecord.ashx'>修改</td>");
26             sb.AppendLine("<tr>");
27         }
28         string content = System.IO.File.ReadAllText(context.Server.MapPath("model.htm"));
29         content = content.Replace("@replace", sb.ToString()).Replace("@title", "學生資訊表");
30         context.Response.Write(content);
31     }
32  
33     public bool IsReusable {
34         get {
35             return false;
36         }
37     }
38 
39 }
40 public class SqlHelper
41 {
42     public static System.Data.DataTable ExecuteDataTble()
43     {
44         using (SqlConnection con = new SqlConnection("Data Source=ROHELM-PC;Initial Catalog=T-SQL練手;Integrated Security=True"))
45         {
46             using (SqlCommand cmd = con.CreateCommand())
47             {
48                 cmd.CommandText = "select * from student";
49                 DataTable dt = new DataTable();
50                 SqlDataAdapter da = new SqlDataAdapter(cmd);
51                 da.Fill(dt);
52                 return dt;
53             }
54         }
55     }
56 }
複製程式碼

下面這個其實儲存的形式是什麼無關緊要的,只要是文字形式就行。

model

刪除部分

del

新增部分

add

使用資料庫指令碼:

SQL

執行效果:

 其他操作顯示區域沒有調整好,且受到上傳圖片的限制未演示。