asp.net初学习实现简单的增删改查功能
2012-05-09 23:58
429 查看
在学习中发现网页模板可以大大节约重复的页面代码,同时对于WebSite开发的程序在不同的页面直接调用已写好的代码既不方面,只是作为代码量不大的程序进行开发还是比较方便。
get和post的区别get是通过url传递表单值,post通过url看不到表单域的值;get传递的数据量是有限的,如果要传递大数据量不能用get,比如上传文章、传递密码或者<textarea>发表大段文章,post则没有这个限制;post会有浏览器提示重新提交表单的问题。也就是说get和post都是以不同的方式提交表单的信息,只是方式不一样,post是以头报文的形式传递,我们可以使用火狐的免费插件firebug或者免费的httpwatch(破解版的当然免费),看到这些。
简单的说浏览器和服务器直接就是请求和回应,内部的具体细节可以看看博客园中的很多示例图,当然我们可以分析一下,就是浏览器通过DNS解析后向服务器发送请求,服务端侦听到客户端(浏览器)请求,开始分配相应套接字并建立连接,之后就是一方发送一方接收回应的过程,这里面存在一个长连接短连接的概念,具体还是查资料,这里就不多说了。
现在我们先来分析一下已经生成好的web程序,我们来反编译看下具体的执行过程。
我们只看其中关键的部分,也是我们一般程序中的主体部分,使用reflector
它对应的源代码如下:
现在我们再来看关键的部分:
从上面可以看出,.NET运行时将html创建成一个树对象,而后已以创建节点对象模型
这里我只是让大家能看到 <title>测试</title>的效果,具体的可以自己看看。
下面就写个小代码试下手感受下asp.net web开发,基本原理都差不多只是对于刚从Winform转过来的同学感觉上很繁琐,节约时间不多说了,直接上代码,代码简单就是为了自己熟悉测试的
下面这个其实保存的形式是什么无关紧要的,只要是文本形式就行。
SQL
运行效果:
其他操作显示区域没有调整好,且受到上传图片的限制未演示。
get和post的区别get是通过url传递表单值,post通过url看不到表单域的值;get传递的数据量是有限的,如果要传递大数据量不能用get,比如上传文章、传递密码或者<textarea>发表大段文章,post则没有这个限制;post会有浏览器提示重新提交表单的问题。也就是说get和post都是以不同的方式提交表单的信息,只是方式不一样,post是以头报文的形式传递,我们可以使用火狐的免费插件firebug或者免费的httpwatch(破解版的当然免费),看到这些。
简单的说浏览器和服务器直接就是请求和回应,内部的具体细节可以看看博客园中的很多示例图,当然我们可以分析一下,就是浏览器通过DNS解析后向服务器发送请求,服务端侦听到客户端(浏览器)请求,开始分配相应套接字并建立连接,之后就是一方发送一方接收回应的过程,这里面存在一个长连接短连接的概念,具体还是查资料,这里就不多说了。
现在我们先来分析一下已经生成好的web程序,我们来反编译看下具体的执行过程。
我们只看其中关键的部分,也是我们一般程序中的主体部分,使用reflector
[CompilerGlobalScope] public class default_aspx : _Default, IHttpHandler { // Fields private static object __fileDependencies; private static bool __initialized; // Methods [DebuggerNonUserCode] public default_aspx(); [DebuggerNonUserCode] private HtmlHead __BuildControl__control2(); [DebuggerNonUserCode] private HtmlTitle __BuildControl__control3(); [DebuggerNonUserCode] private HtmlForm __BuildControlform1(); [DebuggerNonUserCode] private void __BuildControlTree(default_aspx __ctrl); [DebuggerNonUserCode] protected override void FrameworkInitialize(); [DebuggerNonUserCode] public override int GetTypeHashCode(); [DebuggerNonUserCode] public override void ProcessRequest(HttpContext context); } Expand Methods
它对应的源代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>测试</title> </head> <body> <form id="form1" runat="server"> <div> </div> </form> </body> </html>
现在我们再来看关键的部分:
[DebuggerNonUserCode] private void __BuildControlTree(default_aspx __ctrl) { this.InitializeCulture(); IParserAccessor accessor = __ctrl; 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")); HtmlHead head = this.__BuildControl__control2(); accessor.AddParsedSubObject(head); accessor.AddParsedSubObject(new LiteralControl("\r\n<body>\r\n ")); HtmlForm form = this.__BuildControlform1(); accessor.AddParsedSubObject(form); accessor.AddParsedSubObject(new LiteralControl("\r\n</body>\r\n</html>\r\n")); }
从上面可以看出,.NET运行时将html创建成一个树对象,而后已以创建节点对象模型
[DebuggerNonUserCode] private HtmlTitle __BuildControl__control3() { HtmlTitle title = new HtmlTitle(); IParserAccessor accessor = title; accessor.AddParsedSubObject(new LiteralControl("测试")); return title; }
这里我只是让大家能看到 <title>测试</title>的效果,具体的可以自己看看。
下面就写个小代码试下手感受下asp.net web开发,基本原理都差不多只是对于刚从Winform转过来的同学感觉上很繁琐,节约时间不多说了,直接上代码,代码简单就是为了自己熟悉测试的
<%@ WebHandler Language="C#" Class="List" %> using System; using System.Web; using System.Data; using System.Data.SqlClient; public class List : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; DataTable dt = SqlHelper.ExecuteDataTble(); System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (DataRow dr in dt.Rows) { sb.AppendLine(" <tr>"); sb.AppendLine("<td>" + dr["s_no"] + "</td>"); sb.AppendLine("<td>" + dr["s_name"] + "</td>"); sb.AppendLine("<td>" + dr["s_sex"] + "</td>"); sb.AppendLine("<td>" + dr["s_birthday"] + "</td>"); sb.AppendLine("<td>" + dr["s_avgrade"] + "</td>"); sb.AppendLine("<td>" + dr["s_dept"] + "</td>"); sb.AppendLine("<td><a href=del.ashx?id="+dr["s_no"]+">删除</td>"); sb.AppendLine("<td><input type='checkbox' name='ckdel' value= '"+ dr["s_no"]+"'/>选择</td>"); sb.AppendLine("<td><a href='UpdateRecord.ashx'>修改</td>"); sb.AppendLine("<tr>"); } string content = System.IO.File.ReadAllText(context.Server.MapPath("model.htm")); content = content.Replace("@replace", sb.ToString()).Replace("@title", "学生信息表"); context.Response.Write(content); } public bool IsReusable { get { return false; } } } public class SqlHelper { public static System.Data.DataTable ExecuteDataTble() { using (SqlConnection con = new SqlConnection("Data Source=ROHELM-PC;Initial Catalog=T-SQL练手;Integrated Security=True")) { using (SqlCommand cmd = con.CreateCommand()) { cmd.CommandText = "select * from student"; DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(dt); return dt; } } } }
下面这个其实保存的形式是什么无关紧要的,只要是文本形式就行。
SQL
USE [T-SQL练手] GO /****** Object: Table [dbo].[student] Script Date: 05/10/2012 00:05:40 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[student]( [s_no] [int] NOT NULL, [s_name] [nvarchar](50) NOT NULL, [s_sex] [char](2) NULL, [s_birthday] [smalldatetime] NULL, [s_speciality] [varchar](50) NULL, [s_avgrade] [numeric](3, 1) NULL, [s_dept] [varchar](50) NULL, CONSTRAINT [PK__student__2F36BC5B7F60ED59] PRIMARY KEY CLUSTERED ( [s_no] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: Default [DF__student__s_speci__03317E3D] Script Date: 05/10/2012 00:05:40 ******/ ALTER TABLE [dbo].[student] ADD CONSTRAINT [DF__student__s_speci__03317E3D] DEFAULT ('计算机软件与理论') FOR [s_speciality] GO /****** Object: Default [DF__student__s_dept__0519C6AF] Script Date: 05/10/2012 00:05:40 ******/ ALTER TABLE [dbo].[student] ADD CONSTRAINT [DF__student__s_dept__0519C6AF] DEFAULT ('计算机科学系') FOR [s_dept] GO /****** Object: Check [CK__student__s_avgra__0425A276] Script Date: 05/10/2012 00:05:40 ******/ ALTER TABLE [dbo].[student] WITH CHECK ADD CONSTRAINT [CK__student__s_avgra__0425A276] CHECK (([s_avgrade]>=(0) AND [s_avgrade]<=(100))) GO ALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK__student__s_avgra__0425A276] GO /****** Object: Check [CK__student__s_birth__023D5A04] Script Date: 05/10/2012 00:05:40 ******/ ALTER TABLE [dbo].[student] WITH CHECK ADD CONSTRAINT [CK__student__s_birth__023D5A04] CHECK (([s_birthday]>='1970-1-1' AND [s_birthday]<='2000-1-1')) GO ALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK__student__s_birth__023D5A04] GO /****** Object: Check [CK__student__s_sex__014935CB] Script Date: 05/10/2012 00:05:40 ******/ ALTER TABLE [dbo].[student] WITH CHECK ADD CONSTRAINT [CK__student__s_sex__014935CB] CHECK (([s_sex]='男' OR [s_sex]='女')) GO ALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK__student__s_sex__014935CB] GO
运行效果:
其他操作显示区域没有调整好,且受到上传图片的限制未演示。
相关文章推荐
- 使用myeclipse与sqlyog实现简单的增删查修功能中常见的错误
- 自己写了一个链表功能还不完善但是简单的增删改查功能都已经实现了
- SSH框架搭建(附带,框架写的标准的三层架构小程序,实现简单的登陆校验,增删改查功能)
- mysql数据库在ubuntu虚拟机下的开启和实现创建数据库实现简单增删改查功能(一)
- JFinal框架学习------整合bootstrap前端框架,实现简单的增删改查功能
- JFinal框架简单使用及增删查改分页功能实现
- sqlite之增删改查--简单的实现iOS收藏夹功能
- SSH实现简单增删改查的功能实例
- 关于短信模板管理简单的增删改查的功能实现
- php+mysql实现简单的增删改查功能
- springmvc+spring3+hibernate4框架简单整合,简单实现增删改查功能
- Dom4j实现xml简单的增删改查功能
- 使用三层架构实现简单的MVC登陆操作!并实现基本的增删改查功能!!
- 【小试身手】几个自定义控件的组合应用,实现简单的“增删改查”功能(有源码)
- PHP实现MYSQL简单的增删改查功能
- 简单的考生管理系统,java以XML为数据库,jaxp操作XML实现简单的增删查功能
- jQuery实现的简单在线计算器功能
- PHP简单实现“相关文章推荐”功能的方法
- Android get/ post 方法 传递网络数据 -简单的翻译功能实现(GET)