diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/.keep" "b/25.\350\202\226\346\205\247\350\276\276/55/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/Buy.aspx" "b/25.\350\202\226\346\205\247\350\276\276/55/Buy.aspx"
new file mode 100644
index 0000000000000000000000000000000000000000..fc034fadf1117a91b9a3ce12e378b090b4c1b394
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/55/Buy.aspx"
@@ -0,0 +1,95 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Buy.aspx.cs" Inherits="大二.NET大考.Buy" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/Buy.aspx.cs" "b/25.\350\202\226\346\205\247\350\276\276/55/Buy.aspx.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..cba0bffb24535d1b2f977e07dbba994789d9c507
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/55/Buy.aspx.cs"
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+using System.Threading.Tasks;
+
+namespace 大二.NET大考
+{
+ public partial class Buy : System.Web.UI.Page
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
+ }
+
+ protected void Button1_Click(object sender, EventArgs e)
+ {
+ //
+ string mName = DropDownList1.Text;
+ string sName = TextBox1.Text;
+ string tel = TextBox2.Text;
+ string addr = TextBox3.Text;
+ //配送方式
+ int stype = 0;
+ if (RadioButton2.Checked)
+ {
+ stype = 1;
+ }
+ string remark = TextBox4.Text;
+
+ //下单时间????
+ DateTime dt = DateTime.Now;
+
+ //下单时默认是未配送:1
+ int state = 1;
+
+ //下单时间是空的
+ string sql = $"insert OrderInfo(MedicineName,UserId,AddTime,RealName,Mobile,Address,State,SendType,Remark) " +
+ $"values('{mName}','{Session["Id"]}','{dt}','{sName}','{tel}','{addr}','{state}','{stype}','{remark}')";
+
+ int result = DAL.DBHelper.ExecuteSql(sql);
+ if (result > 0)
+ {
+ Response.Write("");
+ //延时
+ Task.Delay(3000);
+ Response.Redirect("Page.aspx");
+ return;
+ }
+ Response.Write("");
+
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/DBHelper.cs" "b/25.\350\202\226\346\205\247\350\276\276/55/DBHelper.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..3f97add714e6ebd23d36fd77168753d73a405e54
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/55/DBHelper.cs"
@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Web;
+
+namespace 大二.NET大考.DAL
+{
+ ///
+ /// 创建DBHelper类使用ADO.NET提供的程序类完成对数据库的操作
+ ///
+ public static class DBHelper
+ {
+ //创建数据库连接字符串
+ static string connetString = "server=.;database=OrderMedicineDB;uid=sa;pwd=123456;";
+
+ ///
+ /// 根据sql语句获取数据库的结果集数据,并返回存储结果集的数据表对象
+ ///
+ /// 要在数据库中执行查询的sql语句
+ /// 一个DataTable对象,该对象存储查询结果集
+ public static DataTable GetData(string sql)
+ {
+
+
+ //创建DataAdapter对象,作为适配器;用其Fill在数据库执行查询的sql语句,并将查询结果填充到数据集或数据表对象中
+ SqlDataAdapter adapter = new SqlDataAdapter(sql, connetString);
+
+ //定义DataTable存储查询结果集,该对象将查询的结果数据存储在内存中
+ DataTable dt = new DataTable();
+
+ //用DataAdapter类的Fill方法将数据库的查询结果集存放到对象dt中,dt对象是存放在内存中的数据表,可以离线操作数据库数据
+ adapter.Fill(dt);
+
+ //返回存储查询结果的对象dt
+ return dt;
+ }
+
+ ///
+ /// 使用SqlCommand类,在数据库中执行操作类的sql语句
+ ///
+ /// 要执行的非查询的Sql语句
+ /// 返回数据库执行sql语句后的影响行数,大于0操作成功
+ public static int ExecuteSql(string sql)
+ {
+
+ int result = 0;
+
+ //使用数据库连接字符串,创建SqlConnection类对象,用于连接数据库
+ SqlConnection connection = new SqlConnection(connetString);
+ //打开数据库:调用SqlConnection类的Open方法,打开数据库
+ connection.Open();
+
+ //创建数据库操作对象:使用SqlCommand类实例化该对象,通过该对象对数据库执行sql语句;
+ //初始化参数为要执行的sql语句和连接对象
+ SqlCommand command = new SqlCommand(sql, connection);
+
+ //调用SqlCommand类ExecuteNonQuery方法,在数据库中执行该对象中的sql语句;
+ //ExecuteNonQuery方法返回sql语句执行后的影响行数;
+ result = command.ExecuteNonQuery();//result保存ExecuteNonQuery方法返回的影响行数
+
+ //关闭数据库:调用SqlConnection类的Close方法,关闭数据库
+ connection.Close();
+
+ //将执行sql后的影响行数返回给调用该方法的地方,用于判断是否操作成功;
+ return result;
+ }
+
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/Index.aspx" "b/25.\350\202\226\346\205\247\350\276\276/55/Index.aspx"
new file mode 100644
index 0000000000000000000000000000000000000000..3c7eb4302c0b844960a8d6245fe127cea19dee69
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/55/Index.aspx"
@@ -0,0 +1,76 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="大二.NET大考.Index" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/Index.aspx.cs" "b/25.\350\202\226\346\205\247\350\276\276/55/Index.aspx.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..4b91802cb002318cc68043df143bae69bcf4700f
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/55/Index.aspx.cs"
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace 大二.NET大考
+{
+ public partial class Index : System.Web.UI.Page
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
+ }
+
+ protected void Button1_Click(object sender, EventArgs e)
+ {
+ //连接数据库
+ Label1.Text = "";
+ string name = TextBox1.Text.Trim();
+ string pwd = TextBox2.Text.Trim();
+ string sql = $"select * from UserInfo where UserName='{name}' and Password='{pwd}'";
+ DataTable dt = DAL.DBHelper.GetData(sql);
+ if (dt.Rows.Count == 1)
+ {
+ //登录成功,保存用户ID到Session中
+ Session["Id"] = dt.Rows[0]["UserId"];
+
+ //跳转页面
+ Response.Redirect("Page.aspx");
+ }
+ else
+ {
+ Label1.Text = "用户名或者密码错误";
+ }
+ }
+
+ protected void Button2_Click(object sender, EventArgs e)
+ {
+ Response.Redirect("Register.aspx");
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/Page.aspx" "b/25.\350\202\226\346\205\247\350\276\276/55/Page.aspx"
new file mode 100644
index 0000000000000000000000000000000000000000..71bbac7a7d32c47310dbcd36f4a2a0b048d10681
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/55/Page.aspx"
@@ -0,0 +1,58 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Page.aspx.cs" Inherits="大二.NET大考.Page" %>
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/Page.aspx.cs" "b/25.\350\202\226\346\205\247\350\276\276/55/Page.aspx.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..888273e2db93fd1e7345b055c3e19b632c08e989
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/55/Page.aspx.cs"
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace 大二.NET大考
+{
+ public partial class Page : System.Web.UI.Page
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+
+ }
+
+ protected void Button1_Click(object sender, EventArgs e)
+ {
+ Response.Redirect("Buy.aspx");
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/Register.aspx" "b/25.\350\202\226\346\205\247\350\276\276/55/Register.aspx"
new file mode 100644
index 0000000000000000000000000000000000000000..8b9782604fa7f8e97b0d9128149a2f432c2c205a
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/55/Register.aspx"
@@ -0,0 +1,29 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="大二.NET大考.Register" %>
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/25.\350\202\226\346\205\247\350\276\276/55/Register.aspx.cs" "b/25.\350\202\226\346\205\247\350\276\276/55/Register.aspx.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..fd41e5d2a306e8d468fad5cede72b1559155ed9f
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/55/Register.aspx.cs"
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace 大二.NET大考
+{
+ public partial class Register : System.Web.UI.Page
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
+ }
+
+ protected void Button1_Click(object sender, EventArgs e)
+ {
+ string name = TextBox1.Text.Trim();
+ string pwd = TextBox2.Text.Trim();
+ //验证有没有该用户,如果有不予注册
+ string sql = $"select * from UserInfo where UserName='{name}'";
+ DataTable dt = DAL.DBHelper.GetData(sql);
+ if (dt.Rows.Count > 0)
+ {
+ Response.Write("");
+ return;
+ }
+ //用户名不存在可以注册
+ string sql1 = $"insert UserInfo values('{name}','{pwd}')";
+ //提示
+ Response.Write("");
+ //自动跳转到登录页
+ Response.Redirect("Index.aspx");
+ }
+
+ protected void Button2_Click(object sender, EventArgs e)
+ {
+ Response.Redirect("Index.aspx");
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/.keep" "b/25.\350\202\226\346\205\247\350\276\276/66/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/Admin.aspx" "b/25.\350\202\226\346\205\247\350\276\276/66/Admin.aspx"
new file mode 100644
index 0000000000000000000000000000000000000000..ad2f8f49fd7e68fcd4ccab276ad68bac2a31bc9b
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/Admin.aspx"
@@ -0,0 +1,96 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Admin.aspx.cs" Inherits="前端大考.Admin" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/Admin.aspx.cs" "b/25.\350\202\226\346\205\247\350\276\276/66/Admin.aspx.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..8802f06402b8f8de2f04fffc28e7565eece706e3
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/Admin.aspx.cs"
@@ -0,0 +1,97 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace 前端大考
+{
+ public partial class Admin : System.Web.UI.Page
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
+ if (!IsPostBack)
+ {
+ string sql = "select * from books";
+ DataList1.DataSource = DAL.DBHepler.GetValue(sql);
+ DataList1.DataBind();
+ }
+ }
+
+ protected void Button1_Click(object sender, EventArgs e)
+ {
+ //根据书名
+ if(DropDownList1.SelectedIndex == 0)
+ {
+ string b_name = TextBox1.Text;
+ string sql = $"select * from books where b_name like '%{b_name}%'";
+ DataTable dt = DAL.DBHepler.GetValue(sql);
+ DataList1.DataSource = dt;
+ DataList1.DataBind();
+ }//根据作者
+ else if( DropDownList1.SelectedIndex == 1)
+ {
+ string b_auth = TextBox1.Text;
+ string sql = $"select * from books where b_auth like '%{b_auth}%'";
+ DataTable dt = DAL.DBHepler.GetValue(sql);
+ DataList1.DataSource = dt;
+ DataList1.DataBind();
+ }
+
+ }
+
+ protected void Button2_Click(object sender, EventArgs e)
+ {
+ //书名:
+ string bname = TextBox2.Text;
+ string auth = TextBox3.Text;
+ string publ = TextBox4.Text;
+ string price = TextBox5.Text;
+ string num = TextBox6.Text;
+ string intro = "";
+ //封面b_guid
+ //1.判断有没选中
+ if (!FileUpload1.HasFile)
+ {
+ Response.Write("");
+ return;
+ }
+ //2.判断后缀名 string.spilt 活着.jpg -- > 0:活着 1:jpg
+ string[] filename = FileUpload1.FileName.Split('.');
+ //后缀
+ string suffix = filename[filename.Length-1];
+ //文件名guid
+ string nfilename = Guid.NewGuid().ToString() + "." + suffix;
+ if(suffix=="jpg" || suffix=="png" || suffix == "jpeg")
+ {
+ //3.上传
+ //重命名
+
+ FileUpload1.SaveAs(Server.MapPath(".") + "/images/" + nfilename);
+ }
+ else
+ {
+ Response.Write("");
+ return;
+ }
+
+ string sql = $"insert into books values('{bname}','{auth}','{publ}','{intro}','{price}','{num}','{nfilename}')";
+
+ int r = DAL.DBHepler.ExeNonQuery(sql);
+ if (r > 0)
+ {
+ Response.Write("");
+ }
+ string b_auth = TextBox1.Text;
+ string sql1 = "select * from books";
+ DataTable dt = DAL.DBHepler.GetValue(sql1);
+ DataList1.DataSource = dt;
+ DataList1.DataBind();
+
+
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/DBHepler.cs" "b/25.\350\202\226\346\205\247\350\276\276/66/DBHepler.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..38f9404924ed2106a6a6f50b10d0209e0e0854e9
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/DBHepler.cs"
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Web;
+
+namespace 前端大考.DAL
+{
+ public static class DBHepler
+ {
+ static string conStr = "server=.;uid=sa;pwd=123456;database=LibDB";
+
+ public static DataTable GetValue(string sql)
+ {
+ SqlDataAdapter ada = new SqlDataAdapter(sql, conStr);
+
+ DataTable dt = new DataTable();
+ ada.Fill(dt);
+ return dt;
+ }
+
+ public static int ExeNonQuery(string sql)
+ {
+ SqlConnection con = new SqlConnection(conStr);
+ con.Open();
+ SqlCommand command = new SqlCommand(sql,con);
+ int resu = command.ExecuteNonQuery();
+
+ con.Close();
+
+ return resu;
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/\345\211\215\347\253\257\345\244\247\350\200\203.csproj.user" "b/25.\350\202\226\346\205\247\350\276\276/66/\345\211\215\347\253\257\345\244\247\350\200\203.csproj.user"
new file mode 100644
index 0000000000000000000000000000000000000000..f8201e23bd5f08c099fdaa6150479430c91a6f79
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/\345\211\215\347\253\257\345\244\247\350\200\203.csproj.user"
@@ -0,0 +1,38 @@
+
+
+
+ true
+
+
+
+
+
+
+ Debug|Any CPU
+
+
+
+
+
+
+
+ CurrentPage
+ True
+ False
+ False
+ False
+
+
+
+
+
+
+
+
+ True
+ False
+
+
+
+
+
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/\345\233\276\344\271\246\347\256\241\347\220\206\347\263\273\347\273\237.aspx" "b/25.\350\202\226\346\205\247\350\276\276/66/\345\233\276\344\271\246\347\256\241\347\220\206\347\263\273\347\273\237.aspx"
new file mode 100644
index 0000000000000000000000000000000000000000..ae4368af0864630467e194b2037c5de1b5ccdc70
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/\345\233\276\344\271\246\347\256\241\347\220\206\347\263\273\347\273\237.aspx"
@@ -0,0 +1,114 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="图书管理系统.aspx.cs" Inherits="前端大考.图书管理系统" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/\345\233\276\344\271\246\347\256\241\347\220\206\347\263\273\347\273\237.aspx.cs" "b/25.\350\202\226\346\205\247\350\276\276/66/\345\233\276\344\271\246\347\256\241\347\220\206\347\263\273\347\273\237.aspx.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..92e3e20837c786e4ea84e86a37d5553167e5e729
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/\345\233\276\344\271\246\347\256\241\347\220\206\347\263\273\347\273\237.aspx.cs"
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace 前端大考
+{
+ public partial class 图书管理系统 : System.Web.UI.Page
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
+ Label1.Visible = false;
+ }
+
+ protected void Button1_Click(object sender, EventArgs e)
+ {
+ string name = TextBox1.Text.Trim();
+ string pwd = TextBox2.Text.Trim();
+ string sql = $"select * from t_user where name='{name}' and pwd = '{pwd}'";
+ DataTable dt = DAL.DBHepler.GetValue(sql);
+ if (dt.Rows.Count > 0)
+ {
+ string st = dt.Rows[0]["utype"].ToString();
+ //bit类型 0:False 1: True
+ //性别
+ if(st.Equals("False"))
+ {
+ Response.Redirect("用户.aspx");
+ }
+ else
+ {
+ Session["admin"] = dt.Rows[0]["name"];
+ Response.Redirect("管理员.aspx");
+ }
+ }
+ else
+ {
+ Label1.Text = "用户名或者密码错误";
+ Label1.Visible = true;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/\347\224\250\346\210\267.aspx" "b/25.\350\202\226\346\205\247\350\276\276/66/\347\224\250\346\210\267.aspx"
new file mode 100644
index 0000000000000000000000000000000000000000..78f7281d16ba48ea6191344521fede845363dce1
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/\347\224\250\346\210\267.aspx"
@@ -0,0 +1,17 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="用户.aspx.cs" Inherits="前端大考.用户" %>
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/\347\224\250\346\210\267.aspx.cs" "b/25.\350\202\226\346\205\247\350\276\276/66/\347\224\250\346\210\267.aspx.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..6edb7f5f98c961bb299e84b8a1725f6d6165d736
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/\347\224\250\346\210\267.aspx.cs"
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace 前端大考
+{
+ public partial class 用户 : System.Web.UI.Page
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/\347\256\241\347\220\206\345\221\230.aspx" "b/25.\350\202\226\346\205\247\350\276\276/66/\347\256\241\347\220\206\345\221\230.aspx"
new file mode 100644
index 0000000000000000000000000000000000000000..dbbe090408afa438ea0aade93c3eeaa86bfc117c
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/\347\256\241\347\220\206\345\221\230.aspx"
@@ -0,0 +1,269 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="管理员.aspx.cs" Inherits="前端大考.管理员" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/25.\350\202\226\346\205\247\350\276\276/66/\347\256\241\347\220\206\345\221\230.aspx.cs" "b/25.\350\202\226\346\205\247\350\276\276/66/\347\256\241\347\220\206\345\221\230.aspx.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..5f4585e8b2feee18928b27e2a2172776e5ca49b8
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/66/\347\256\241\347\220\206\345\221\230.aspx.cs"
@@ -0,0 +1,143 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace 前端大考
+{
+ public partial class 管理员 : System.Web.UI.Page
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
+
+ MultiView1.ActiveViewIndex = 0;
+ if (!IsPostBack)
+ {
+ if(Session["admin"] != null)
+ {
+ Label7.Text = "欢迎你:" + Session["admin"].ToString();
+ }
+ else
+ {
+ Response.Redirect("图书管理系统.aspx");
+ }
+ DropDownList1_SelectedIndexChanged(sender, e);
+ MultiView1.ActiveViewIndex = -1;
+ }
+ }
+
+ protected void Button2_Click(object sender, EventArgs e)
+ {
+ MultiView1.ActiveViewIndex = -1;
+ }
+
+ protected void Button1_Click(object sender, EventArgs e)
+ {
+ MultiView1.ActiveViewIndex = 0;
+ }
+
+ protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ //视图还是列表
+ if(DropDownList1.SelectedIndex == 0)
+ {
+ //列表
+ DataList1.Visible = false;
+ GridView1.Visible = true;
+ }
+ else if (DropDownList1.SelectedIndex == 1)
+ {
+ //视图
+ DataList1.Visible = true;
+ GridView1.Visible = false;
+ }
+ }
+
+ ///
+ /// 添加书籍
+ ///
+ ///
+ ///
+ protected void Button3_Click(object sender, EventArgs e)
+ {
+ //书名
+ string name = TextBox1.Text;
+ string author = TextBox2.Text;
+ string pub = TextBox3.Text;
+ string intro = TextBox4.Text;
+ //定价
+ decimal price = decimal.Parse(TextBox5.Text);
+ //库存
+ int num = int.Parse(TextBox6.Text);
+
+
+
+
+ //封面
+ //1.根据文件后缀名
+ //判断有没该文件
+ if (!FileUpload1.HasFile)
+ {
+ return;
+ }
+
+ //如果有
+ //获取文件名和后缀名
+ string[] filename = FileUpload1.FileName.Split('.');
+ //获取后缀名,转换为小写
+ string suffix = filename[filename.Length-1].ToLower();
+ //判断后缀是不是 jpg, png, jpeg
+ string nfileName = Guid.NewGuid().ToString() + "." + suffix;
+ if(suffix == "jpg" || suffix == "png" || suffix == "jpeg")
+ {
+ //符合
+ //上传
+ FileUpload1.SaveAs(Server.MapPath(".") + "/images/" + nfileName);
+ }
+ else
+ {
+ Response.Write("");
+ return;
+ }
+
+
+ string sql = $"insert books(b_name,b_auth,b_publ,b_intro,b_price,b_num," +
+ $"b_guid) values('{name}','{author}','{pub}','{intro}','{price}','{num}','{nfileName}')";
+
+ int r = DAL.DBHepler.ExeNonQuery(sql);
+ if (r > 0)
+ {
+ Response.Write("");
+ MultiView1.ActiveViewIndex = -1;
+
+ //不需要数据源,直接绑定
+ GridView1.DataBind();
+ DataList1.DataBind();
+ }
+
+
+
+ }
+
+
+ protected void Button4_Click(object sender, EventArgs e)
+ {
+ if (DropDownList2.SelectedIndex == 0)
+ {
+ //书名查找
+ string b_name = TextBox7.Text;
+ string sql = $"select * from books where b_name like '%{b_name}%'";
+ }
+ else if (DropDownList2.SelectedIndex == 1)
+ {
+ //作者查找
+ string b_auth = TextBox7.Text;
+ string sql = $"select * from books where b_auth like '%{b_auth}%'";
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/Test.aspx" "b/25.\350\202\226\346\205\247\350\276\276/Test.aspx"
new file mode 100644
index 0000000000000000000000000000000000000000..b6c949800cc8df998ececad6355aedf404d41ba0
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/Test.aspx"
@@ -0,0 +1,94 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="前端考试卷.Test1" %>
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/25.\350\202\226\346\205\247\350\276\276/Test.aspx.cs" "b/25.\350\202\226\346\205\247\350\276\276/Test.aspx.cs"
new file mode 100644
index 0000000000000000000000000000000000000000..9acd44a97d383904bab8479a2f64b3eba6308d62
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/Test.aspx.cs"
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace 前端考试卷
+{
+ public partial class Test1 : System.Web.UI.Page
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
+ }
+
+ protected void Button1_Click(object sender, EventArgs e)
+ {
+ MultiView1.ActiveViewIndex = 0;
+ }
+
+ protected void Button3_Click(object sender, EventArgs e)
+ {
+ MultiView1.ActiveViewIndex = -1;
+ }
+
+ protected void Button2_Click(object sender, EventArgs e)
+ {
+ //调用DBHelper进行插入操作
+ //姓名
+ string name = TextBox1.Text;
+ string email = TextBox2.Text;
+ //性别
+ string sex = "男";
+ if (RadioButton2.Checked)
+ {
+ sex = "女";
+ }
+ else if(RadioButton3.Checked)
+ {
+ sex = "未知";
+ }
+
+ //省份
+ string prov = DropDownList1.SelectedValue;
+
+ //checkbox获取
+ string hobby = "";
+ //方法1
+ //if (CheckBox1.Checked)
+ //{
+ // hobby += CheckBox1.Text;
+ //}
+
+ //方法2
+ //foreach (var item in form1.Controls)
+ //{
+ // //筛选出checkbox
+ // if(item is CheckBox)
+ // {
+ // //是否被选中
+ // var t = (CheckBox)item;
+ // if (t.Checked)
+ // {
+ // hobby += t.Text+"|";
+ // }
+ // }
+ //}
+
+ //方法3
+ List lis = new List { CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5 };
+ foreach (var item in lis)
+ {
+ if (item.Checked)
+ {
+ hobby += item.Text+"|";
+ }
+ }
+
+
+
+
+ string sql = $"insert t_user values('{name}','{email}','{sex}','{prov}','{hobby}')";
+ int re = 图书系统.Util.Updata(sql);
+ if (re > 0)
+ {
+ Response.Write("");
+ // GridView1.DateSource = dt
+ // DataBind()
+ GridView1.DataBind();
+ }
+ else
+ {
+ Response.Write("");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/web\347\254\224\350\256\260/.keep" "b/25.\350\202\226\346\205\247\350\276\276/web\347\254\224\350\256\260/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/25.\350\202\226\346\205\247\350\276\276/web\347\254\224\350\256\260/C#-WebForm-Note.md" "b/25.\350\202\226\346\205\247\350\276\276/web\347\254\224\350\256\260/C#-WebForm-Note.md"
new file mode 100644
index 0000000000000000000000000000000000000000..afeb5494edcf26c5c9abe5b40a833723258cbdf8
--- /dev/null
+++ "b/25.\350\202\226\346\205\247\350\276\276/web\347\254\224\350\256\260/C#-WebForm-Note.md"
@@ -0,0 +1,565 @@
+# C#-WebForm-WebForm开发基础
+
+
+
+
+
+### 1、C/S 客户端应用程序
+
+需要从服务器上下载相应的数据,在本地电脑上的客户端里进行加工
+
+数据的加工是在用户的电脑上执行的,会对用户的电脑配置有所要求
+
+
+
+### 2、B/S 网页端应用程序
+
+ASP.NET 统称
+
+ASP.NET WebForm ASP.NET [MVC](https://so.csdn.net/so/search?q=MVC&spm=1001.2101.3001.7020) 平级
+
+用户发送一个请求到[IIS](https://so.csdn.net/so/search?q=IIS&spm=1001.2101.3001.7020)服务器,由服务器将所有的代码执行,服务器会将执行完毕后的html结果给你发送回来,浏览器将发送回来的HTML代码解析给你
+
+IIS是什么?就是服务员
+
+.aspx 中含有C#执行代码,而.html中无需要执行的C#代码
+
+过程:用户浏览器打开网页,向IIS发送请求,如果IIS有默认代码,则直接发送给用户浏览器,如果有要处理的代码,则IIS发送给Framework框架进行处理,Framework返回给IIS代码,IIS在返回给用户浏览器
+
+
+
+IIS:信息服务管理器
+
+位置:控制面板 → 管理工具(系统默认是没有的,需要进行安装)
+
+# webform页面传值
+
+### 1、get方式
+
+发送页
+
+```vbnet
+
+
+protected void button2_Click(object sender, EventArgs e)
+{
+ Response.Redirect("WebForm2.aspx?name=5");
+}
+
+```
+
+接受页
+
+```vbnet
+this.Label1.Text = Request["name"];
+//this.Label2.Text = Request.Params["name"];
+//this.Label3.Text = Request.QueryString[0];
+123
+```
+
+### 2、post方式
+
+a\不带 runat="server"形式
+
+发送页
+
+```vbnet
+
+
+```
+
+接受页
+
+```vbnet
+this.Label1.Text =Request.Form["txtname"];
+1
+```
+
+b\带 runat=“server”
+
+发送页
+
+```vbnet
+
+
+
+
+```
+
+接受页
+
+```vbnet
+this.Label1.Text =Request.Form["txtname"];
+1
+```
+
+### 3、Session 和 Application
+
+```vbnet
+Session["name2"] = "sessontest";
+Application["name3"] = "applicationtest";
+
+this.Label2.Text =(string)Session["name2"];
+this.Label3.Text =(string)Application["name3"];
+12345
+```
+
+### 4、静态变量
+
+发送页
+
+```vbnet
+public static string statest="static string";
+protected void button2_Click(object sender, EventArgs e)
+{
+ Server.Transfer("WebForm2.aspx");
+}
+
+```
+
+接受页
+
+```vbnet
+this.Label1.Text = WebForm1.statest;
+
+```
+
+### 5、Context.Handler 获取控件
+
+发送页
+
+```vbnet
+
+
+
+protected void button2_Click(object sender, EventArgs e)
+{
+ Server.Transfer("WebForm2.aspx");
+}
+
+```
+
+接受页
+
+```vbnet
+//获取post传过来的对象
+if (Context.Handler is WebForm1)
+{
+ WebForm1 poster = (WebForm1)Context.Handler;
+ this.Label1.Text = ((TextBox)poster.FindControl("TextBox1")).Text;
+}
+
+```
+
+### 6、Context.Handler 获取公共变量
+
+发送页
+
+```vbnet
+public string testpost = "testpost";
+protected void button2_Click(object sender, EventArgs e)
+{
+ Server.Transfer("WebForm2.aspx");
+}
+
+```
+
+接受页
+
+```vbnet
+//获取post传过来的对象
+if (Context.Handler is WebForm1)
+{
+ WebForm1 poster = (WebForm1)Context.Handler;
+ this.Label2.Text = poster.testpost;
+ }
+
+```
+
+### 7、Context.Items 变量
+
+发送页
+
+```vbnet
+protected void button2_Click(object sender, EventArgs e)
+{
+ Context.Items["name"] = "contextItems";
+ Server.Transfer("WebForm2.aspx");
+}
+
+```
+
+接受页
+
+```vbnet
+//获取post传过来的对象
+if (Context.Handler is WebForm1)
+{
+ this.Label3.Text = Context.Items["name"].ToString();
+}
+
+```
+
+# ASP.NET内置对象
+
+### Request对象
+
+用来获取客户端在请求一个页面或传送一个Form是提供的所有信息。它包括用户的HTTP变量、能够识别的浏览器、存储客户端的Cookie信息和请求地址等。
+
+Request对象是System.Web.httpRequest类的对象
+
+##### 属性
+
+QueryString :获取HTTP查询字符串变量集合,主要用于收集HTTP协议中Get请求发送的数据
+
+Form :获取窗体或页面变量的集合,用于收集Post方法发送的请求数据
+
+ServerVarible:环境变量集合包含了服务器和客户端的系统内信息
+
+Params:它是QueryString、Form和ServerVarible这三种方式的集合,不区分是由哪种方式传递的参数
+
+ApplicationPath:获取服务器上ASP.NET虚拟应用程序的根目录路径
+
+ContertLength:指定客户端发送的内容长度
+
+Cookies:获取客户端发送的Cookie集合
+
+FilePath:获取当前请求的虚拟路径
+
+Files:获取采用多部分MIME格式的由客户端上载的文件集合
+
+Item:从Cookies, From, QueryString或ServerVariables集合中获取指定的对象
+
+Path:获取当前请求的虚拟路径
+
+Url:获取有关当前请求的URL信息
+
+UserHostName:获取远程客户端的DNS名称
+
+UserHostAddress:获取远程客户端的IP主机地址
+
+IsLocal:获取一个值,该值指示该请求是否来自本地计算机
+
+Browser:获取或设置有关正在请求的客户端浏览器功能信息
+
+##### 方法
+
+BinaryRead():执行对当前输入流进行制定字节数的二进制读取
+
+SaveAs():将HTTP请求保存到磁盘
+
+MapPath():将指定的路径映射到物理路径
+
+### Response对象
+
+Response对象是HttpRespone类的一个实例。该类主要是封装来自ASP.NET操作的HTTP相应信息。Response对象将数据作为请求的结果从服务器发送到客户浏览器中,并提供有关响应的消息。它可用来在页面中输出数据,在页面中跳转,还可以传递各个页面的参数。
+
+##### 方法
+
+Redirect:将网页重新转到另一地址
+
+Write:写出指定字符串。
+
+AppendHeader:
+
+##### 语法格式
+
+Response.AppendHeader(Name,Value)
+参数Name为HTTP头,参数Value为HTTP头的值。
+
+HTTP头是HTTP协议规定的请求和响应消息都支持的头域内容。HTTP头是页面通过HTTP协议访问页面时,最先响应的请求和响应消息,例如HTTP头中的Location,Location头用于将页面重定向到另一个页面,与Redirect方法相似。
+
+WriteFile 将文件输出到客户端
+
+Flush 将缓冲区的数据输出到客户端浏览器
+
+End 停止并结束ASP网页的处理
+
+Close 关闭客户端的联机
+
+ClearHeaders 清除缓冲区中的页面标题
+
+Clear 清除缓冲区的数据
+
+BinaryWrite 将二进制字符或字符串输出到客户端浏览器
+
+AppendToLog 将自定义的数据加入到IIS日志文件中(Log File),以便追踪与分析记录。
+
+##### 属性
+
+ContentType:输出流的内容类型比如html(text/html) 、普通文本(text/pain)还是JPEG图片(image/JPEG)。
+
+ContentEncoding:输出流的编码
+
+Cookies : 返回浏览器的cookies的集合
+
+Buffer : 设置缓冲信息, true | false .默认是true
+
+Expires : 获取或设置在浏览器上缓存的页过期之前的分钟数, 设置为0,则立刻过期
+
+### Page对象
+
+每个aspx文件对应的一个page对象,.aspx页面与后台.cs代码类(局部类)合并生成页面类,Page对象是页面类的实例。所有的.aspx文件(Web窗体页)都继承自System.Web.UI.Page类
+
+<%@ Page
+
+ Language=“C#” —指明后台使用C#语言
+
+ AutoEventWireup=“true” —设置是否自动调用网页Load事件,默认是true
+
+ CodeBehind=“WebDemo1.aspx.cs”—其.aspx文件上绑定的后台代码文件
+
+ Inherits=“ASP.NETDemo.Demo1.WebDemo1” —后台代码类
+
+%>
+
+##### 属性
+
+IsPostBack:该属性可以检查.aspx页是否为传递回服务器的页面,常用于判断页面是否为首次加载。
+
+如果为true则为回发响应,如果为false则为首次加载
+
+IsValid:该属性用于判断页面中的所有输入的内容是否应经通过验证,它是一个布尔值的属性。当需要使用服务器端验证时,可以使用该属性。
+
+IsCrossPagePostBack:该属性判断页面是否使用跨页提交,它是一个布尔值的属性。
+
+Response属性和Request属性上面讲过了
+
+##### 事件
+
+Page类常用的事件及执行的先后顺序:
+
+Page.PreInit 事件:在页初始化开始时发生
+Page.Init 事件:当服务器控件初始化时发生;初始化是控件生存期的第一步。 (继承自 Control。)
+Page.InitComplite事件:在页初始化完成时发生
+Page.PreLoad事件:在页 Load 事件之前发生
+Page.Load事件:当服务器控件加载到 Page 对象中时发生。 (继承自 Control )
+Page.LoadComplete 事件:在页生命周期的加载阶段结束时发生
+Page.PreRender事件 :在加载 Control 对象之后、呈现之前发生。 (继承自 Control。)
+Page.PreRenderComplete 事件:在呈现页内容之前发生
+
+### ViewState对象
+
+视图状态,在 ASP .NET 中,当一个表单被提交时,表单会连同表单值一起出现在浏览器窗口中。如何做到的呢?这是因为 ASP .NET 维持了您的 ViewState。 ViewState 会在页面被提交到服务器时表明它的状态。这个状态是通过在带有 < form runat=“server”> 控件的每个页面上放置一个隐藏域定义的。
+
+这个对象是ASP.NET中特有的对象,在其他语言的后端技术中没有这个对象
+
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ if (!IsPostBack)//如果是第一次访问
+ {
+ //先将Count的值设为0,并且保存在ViewState中
+ ViewState["count"] = 0;
+ }
+ }
+ protected void btnAdd_Click(object sender, EventArgs e)
+ {
+ //每次点击按钮先取出ViewState中的值并且累加之后再次赋给ViewState
+ ViewState["count"] = Convert.ToInt32(ViewState["count"]) + 1;
+ Literal1.Text = ViewState["count"].ToString();
+ }
+ }
+ 使用ViewState实现页面信息的保存
+保存数据:ViewState对象存储数据[键值对]Key=Value
+
+取出数据:根据Key值取出Value值
+
+##### 总结:
+
+ViewState中保存的数据全部被转换成object类型,取出时务必强制转换成特定类型
+ViewState只能在同一个页面的连续多次请求之间保存信息,页面跳转后信息就会丢失
+ViewState的本质
+ViewState的本质是一个隐藏域,和原始的.aspx文件中的多出来的标签一样,都是一个隐藏域,第一次创建ViewState对象其实是创建了一个隐藏域
+
+
+
+### Session对象
+
+Session对象是Asp.Net应用程序中非常重要的一个内置对象,Session是指用户从打开浏览器访问服务器到关闭浏览器之间的会话状态,在一个会话期间,服务器会自动分配一个标识SessionId。Session可以存储用户访问服务器的一些传递资料信息。Session和Application一样都是全局性作用的,区别在于Application对象针对于所有的用户,而Session对象针对于某一个用户。
+
+Session对象可以存储任何类型的值,包括一些用户自定义的数据类型,如用户自定义类、用户自定义结构体等等。Session对象默认20分钟过期,这期间各个页面都可以访问该对象。
+
+Session对象和Cookie对象相比的差别在于,Cookie存储在客户端的浏览器中,而Session对象存储在服务器端,因此一些机密重要的东西一定不能存放在Cookie中以防他人盗取,如用户的密码等机密信息。
+
+Session常见的用处在有:存储登录用户的信息的,可以通过判断Session中是否存在相应的用户信息来判断用户是否登录。
+
+##### Session常用属性:
+
+(1)SessionID:获取Session编号,一般在会话开始的时候由服务器自动分配一个标识SessionId,整个会话过程中的SessionId保持不变。
+
+(2)TimeOut:设置Session对象的超期时间,默认为20分钟。
+
+(3)Keys:根据索引号获取Session变量值
+
+(4)Count:获取Session变量的总数量。
+
+Session常用方法有:
+Session.Add(“name”,“value”):添加名称为Name,值为value的Session对象。
+
+Session.Clear():清除Session变量值。
+
+### Cookie对象
+
+Cookie对象是服务器为用户访问存储的特定信息,这些信息一般存储在浏览器中,服务器可以从提交的数据中获取到相应的Cookie信息,Cookie的最大用途在于服务器对用户身份的确认,即票据认证,用户会话分配的SessionId会存储在Cookie中,通过这个Cookie中的SessionId可以提供用户全局性访问该网站。
+
+一般Cookie对象可以为用户存储一些简单的非机密性的信息,如用户的登录时间等信息。
+
+##### Cookie对象常见属性:
+
+(1)Response.Cookie.Keys:获取Cookie变量名或者根据其索引获取变量值
+
+(2)Response.Cookies.Count:获取Cookie变量的数量
+
+(3)Response.Cookies.AllKeys:将Cookies对象中所有的变量名存储到数组中。
+
+Cookie对象的常用方法有:
+(1)Response.Cookies.Set:用于更新Cookie的变量值
+
+(2)Response.Cookies.Remove:用于删除Cookie变量
+
+(3)Response.Cookies.Get:用Cookie变量名称或者索引值获取变量值。
+
+(4)Response.Cookies.Clear:清除Cookie内所有的变量
+
+(5)Response.Cookies.Add:用于Cookie对象中添加Cookie变量。
+
+创建一个Cookie对象并输出到浏览器可使用以下语句实现:
+
+HttpCookie cookie_t = new HttpCookie(“Test”);//创建一个名称为Test的Cookie对象
+
+cookie_t.Value = “测试数据”; //设置cookie的值
+
+Response.Cookies.Add(cookie_t);
+
+如果要更新上述Cookie的值可采用下列方法:
+
+cookie_t.Value = “更新cookie数据”;
+Response.Cookies.Set(cookie_t);//更新Cookie的值
+
+移除cookie_t可采用 Response.Cookies.Remove(“Test”);即可移除Cookie数据。
+
+ if (Response.Cookies["User"].Value!=null&& Response.Cookies["Pwd"].Value != null)
+ {
+ TextBox1.Text = Response.Cookies["User"].Value;
+ TextBox2.Text = Response.Cookies["Pwd"].Value;
+ }
+
+ //创建cookie
+ HttpCookie cookie = new HttpCookie("User", TextBox1.Text);
+ Response.Cookies.Add(cookie);
+ Response.Write("登录是自己(cookie)");
+
+
+### Session对象
+
+Session对象是Asp.Net应用程序中非常重要的一个内置对象,Session是指用户从打开浏览器访问服务器到关闭浏览器之间的会话状态,在一个会话期间,服务器会自动分配一个标识SessionId。Session可以存储用户访问服务器的一些传递资料信息。Session和Application一样都是全局性作用的,区别在于Application对象针对于所有的用户,而Session对象针对于某一个用户。
+
+Session对象可以存储任何类型的值,包括一些用户自定义的数据类型,如用户自定义类、用户自定义结构体等等。Session对象默认20分钟过期,这期间各个页面都可以访问该对象。
+
+Session对象和Cookie对象相比的差别在于,Cookie存储在客户端的浏览器中,而Session对象存储在服务器端,因此一些机密重要的东西一定不能存放在Cookie中以防他人盗取,如用户的密码等机密信息。
+
+Session常见的用处在有:存储登录用户的信息的,可以通过判断Session中是否存在相应的用户信息来判断用户是否登录。
+
+##### Session常用属性:
+
+(1)SessionID:获取Session编号,一般在会话开始的时候由服务器自动分配一个标识SessionId,整个会话过程中的SessionId保持不变。
+
+(2)TimeOut:设置Session对象的超期时间,默认为20分钟。
+
+(3)Keys:根据索引号获取Session变量值
+
+(4)Count:获取Session变量的总数量。
+
+##### Session常用方法:
+
+Session.Add(“name”,“value”):添加名称为Name,值为value的Session对象。
+
+Session.Clear():清除Session变量值。
+
+### Cookie对象
+
+Cookie对象是服务器为用户访问存储的特定信息,这些信息一般存储在浏览器中,服务器可以从提交的数据中获取到相应的Cookie信息,Cookie的最大用途在于服务器对用户身份的确认,即票据认证,用户会话分配的SessionId会存储在Cookie中,通过这个Cookie中的SessionId可以提供用户全局性访问该网站。
+
+一般Cookie对象可以为用户存储一些简单的非机密性的信息,如用户的登录时间等信息。
+
+##### Cookie对象常见属性有:
+
+(1)Response.Cookie.Keys:获取Cookie变量名或者根据其索引获取变量值
+
+(2)Response.Cookies.Count:获取Cookie变量的数量
+
+(3)Response.Cookies.AllKeys:将Cookies对象中所有的变量名存储到数组中。
+
+##### Cookie对象的常用方法有:
+
+(1)Response.Cookies.Set:用于更新Cookie的变量值
+
+(2)Response.Cookies.Remove:用于删除Cookie变量
+
+(3)Response.Cookies.Get:用Cookie变量名称或者索引值获取变量值。
+
+(4)Response.Cookies.Clear:清除Cookie内所有的变量
+
+(5)Response.Cookies.Add:用于Cookie对象中添加Cookie变量。
+
+创建一个Cookie对象并输出到浏览器可使用以下语句实现:
+
+HttpCookie cookie_t = new HttpCookie(“Test”);//创建一个名称为Test的Cookie对象
+
+cookie_t.Value = “测试数据”; //设置cookie的值
+
+Response.Cookies.Add(cookie_t);
+
+如果要更新上述Cookie的值可采用下列方法:
+
+cookie_t.Value = “更新cookie数据”;
+Response.Cookies.Set(cookie_t);//更新Cookie的值
+
+移除cookie_t可采用 Response.Cookies.Remove(“Test”);即可移除Cookie数据。
+
+ if (Response.Cookies["User"].Value!=null&& Response.Cookies["Pwd"].Value != null)
+ {
+ TextBox1.Text = Response.Cookies["User"].Value;
+ TextBox2.Text = Response.Cookies["Pwd"].Value;
+ }
+
+ //创建cookie
+ HttpCookie cookie = new HttpCookie("User", TextBox1.Text);
+ Response.Cookies.Add(cookie);
+ Response.Write("登录是自己(cookie)");
+
+
+### ASP.NET常用对象比较
+
+对象名称 存储位置 有效时间 信息共享范围
+Request/Response 请求和响应的过程中 请求结束之前 一次请求的一个页面
+ViewState 被请求的页面中 页面关闭之前 多次请求的一个页面
+Session Web服务器端 规定的时间内 同一网站的不同页面
+Cookie 客户端硬盘中 规定的时间内 同一网站的不同页面
+Application Web服务器端 IIS重启之前 整个应用程序中
+
+# 服务器的特性
+
+### 无状态特性
+
+Web服务器不会保留每次浏览器所发出的HTTP请求的具体信息和当时的状态
+即使请求来自于同一个浏览器,他也将其视为“陌生人”,绝不会“记得浏览器”在刚才做了些什么
+在ASP.NET后台中,不再有“成员变量”,理解为每次的请求对于服务器而言都是一次新生,返回的是一个新对象
+ASP.NET中专门提供了一个网页多次请求之间保存信息的对象"ViewState"(视图状态)对象来模拟“成员变量”的角色
\ No newline at end of file
diff --git "a/25.\350\202\226\346\205\247\350\276\276/\344\275\234\344\270\232/.keep" "b/25.\350\202\226\346\205\247\350\276\276/\344\275\234\344\270\232/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391