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

运行效果:

 其他操作显示区域没有调整好,且受到上传图片的限制未演示。


没有更多推荐了,返回首页