asp.net编程基础

vs常用两个快捷键:打开即时窗口 ctrl+alt+i ; 快速代码格式排版:ctrl+k+d

一:Page:页面

Page.IsPostBack  判断页面是否第一次加载用

 if(Page.IsPostBack ){

  //页面第二次加载才会执行里面的代码

}

但是:页面必须要满足几个条件

1:必须要在指页面是服务器控件runat="server"条件之下才能成立

 2.必须是:AutoEventWireup="true"才会执行,【 false】就不会执行page里边的一些事件

Page.IsPostBack实现原理

他是通过隐藏域实现,F12会看到有这么一个div出现,表示页面点击提交按钮,第二次加载显示出来的

 

二:表单的提交方式

1:get

   传值方式不同:地址栏

   设计初衷不同:get用来获取数据,也能传数据,告诉服务器想要什么数据

   传送数据大小不同:1kb

2:post

   传值:放到内容,地址栏看不到

   Post:用于传递数据

   传送数据大小不同:2m

   如果传送文件:必须用post

三:系统对象:Request  是由客户端发起的一个请求; response 响应给客户

方法1: 用于获取get传值 Request.QueryString["name"]

方法2:用于获取post传值 Request.Form["name"]

方法3:用户获取getpost传值 效率最慢 每次都要重新构建一个集合 Request.Params["name"]

 

方法4:用户获取getpost传值 如果get post同时存在取get 效率次之如果开始没找到需要遍历4个集合 Request["name"]

Response.Write(""); //  js脚本弹窗  alert【警报】Response【响应,(口头或书面的)回答,答复】;Write【书写;写字;写作;作曲;编写;写信】

//从服务器传给浏览器用【response】服务器响应给浏览器,从浏览器传给服务器用【request】请求。
Response.Write("请求方式:" + Request.RequestType + "
"
);
Response.Write("用户地址ip:" + Request.UserHostAddress + "
");
Response.Write("用户使用的浏览器:" + Request.UserAgent + "
");

Response.Write("当前服务器名称为:" + Server.MachineName);

//将虚拟路径转换为磁盘上的物理路径,Request.MapPath("./a/b.aspx")就会得到D:\2014\WebSites\WebSite4\a\b.aspx。
//Request.UrlReferrer请求的来源,可以根据这个判断从百度搜的哪个关键词、防下载盗链、防图片盗链,可以伪造(比如迅雷)。 (使用全局一般处理程序);

ViewState["UrlReferrer"]=Request.UrlReferrer.ToString();  //其中ViewState["名称"] 是试图的意思,可以在页面 <%=ViewState["名称"] %> 来显示

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

四:Cookie和session的使用

  • Cookie作用

   解决http协议无状态,比如登陆的时候,服务器怎么知道你登陆没有,相当于起来了一个通行证的作用

   保持状态;记录用户操作习惯,比如广告推广;记住密码等等

存储必须使用response 里边的cookie

读取必须使用request 里边的cookie

写入:
Response.Cookies[Cookie的名称|下标].Value = 值;

读取:
变量 = Request.Cookies[Cookie的名称|下标].Value;
添加:
HttpCookie hc = new HttpCookie ("Cookie的名称","值");
Response.Cookies.Add(hc);

设置时效:
Response.Cookies["Cookie的名称"].Expires = DateTime.Now.AddHours(小时);

Cookie删除:

Response.Cookies["Cookie的名称"].Expires = DateTime.Now.AddHours(-1);  //也就是把设置的存放时间改成负值
Request.Cookies.Clear(); //只是清除cookie集合,无法删除本身

Cookie能不能存一个对象

直接是不能的,cookie本身不支持这个功能

但是可以给cookie扩展功能,支持存对象

 

列:

存值:

HttpCookie hc = new HttpCookie("hello");  //实例化一个cookie对象,键值对的格式

hc.Value = Server.UrlEncode("北极熊大"); //使用url编码解决中文乱码,读取需要用 Server.UrlDecode(值) 方法读取中文cookie值,其他的不需要

hc.Value = "ckljdsaoi";          //例如像这种字符串其他的不需要转编码 ,【每次存值都会覆盖上一个值】

hc.Expires = DateTime.Now.AddHours(2); //设置cookie的过期时间

Response.Cookies.Add(hc);        //添加cookie

读:在读取时一般用if判断是否为空才不容易报错

HttpCookie cc= Request.Cookies["hello"];   //先获取cookie 

Response.Write(cc.Name + ":" + Server.UrlDecode(cc.Value)); //读取需要用 Server.UrlDecode(值) 方法读取中文cookie值,其实是解决中文乱码,其他的不需要

删除:

cc.Expires = DateTime.Now.AddDays(-1); //这里是让cookie过期,即不存在cookie,即退出

Response.Cookies.Add(cc); //在添加一次,当浏览器检查 Cookie 的到期日期时,浏览器便会丢弃这个现已过期的 Cookie,实现删除效果

Session

* 创建:Session[名称]=;
* 获取:object 变量=Session[名称];  //session本是obj类型,输出需要转换
* 删除:Session[名称]=null;  //常用空值达到删除效果,Session.Remove("username");清除某个Session ;Session.Clear(); 只是清除集合里的,不常用;Session.Abandon(); 可以清除全部Session;

列:

存:

Session["username"]="kitty";

读: 在读取时一般用if判断是否为空才不容易报错

object username=Session["username"];  //获取session  ,一般习惯写:String username=Session["username"].ToString();

Response.Write(username.ToString());//强制转换为string类型输出

Session["username"] = null; //清除某个Session,这种方法简单,好记

Cookie和session二者区别

大小:
session比cookie大,cookie 4k左右

存储位置:
session:服务器,内存(默认)
cookie:客户端,文件里边

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

五、Application对象

  //--------------获得浏览页面的人数,可以用在浏览量用:Application对象,写法和session一样,只是作用不一样-----------------------------------------------

            if (Application["Count"] == null)

            {

                Application["Count"] = 1;   //Application是全局的,只要一个用户改变其他用户都改变

            }

            else

            {

                Application["Count"] = Convert.ToInt32(Application["Count"]) + 1;

            }

            Response.Write("你是第" + Application["Count"] + "个访问者。");

            //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

六、常用的代码

Session["time"] = DateTime.Now;   //常用:DateTime.Now.ToString(yyyy-MM-dd  HH:mm:ss);  //输出当前时间

DateTime shijian = DateTime.Parse(Session["time"].ToString());   //将字符串转换为等效的时间格式
string time_now = (DateTime.Now - shijian).TotalSeconds.ToString();  //来哪当前时间 - 过去时间 得到  一共需要的时间

Response.Write("
用时:"+(DateTime.Now
shijian).TotalMilliseconds + "毫秒
");

public static int sj = new Random().Next(1, 101);//定义一个public公共 全局的static 静态变量,用存放1-100的 Random 随机数

Random random = new Random(); //调用系统给的随机数因子(时间的变换而变化)用随机数时 后台一般先实例化

if (!string.IsNullOrEmpty(jj)) {  }   //IsNullOrEmpty(jj) 表示jj为空值,前面加个!表示非,整体表示非空值,不为空

//去除重复
if (list.Contains(lottery)){   //如果数组list中存在随机数lotter就执行里面代码;Contains【包含】的意思,这里用作是否存在
  i--;
  continue;       //继续执行 continue【持续;继续存在;不断发生;继续做;不停地干;(朝相同方向)走,移动;延伸】
}

   string a = "a/dsafasdfsa/dfasd/f";

            string[] c = a.Split('/');  //Split分裂,以 / 划分字符串,char类型截取/后面的字符

            Response.Write(c[2].ToString());  //以第二个 / 读取字符串后面的字符串 这里会输出dfasd

Server的跳转方式:3种

   Server.Execute:把跳转后的页面内容拿到跳转前的页面合并

   Server.Transfer:把跳转前的页面内容拿到跳转后的页面合并

   Response.Redirect:直接跳转到新的页面

Response.Redirect("http://www.baidu.com", false); ////响应.重定向("路径",是否终止当前页默认false否所以经常不写值填一个路径就可以了)

 

七、IO流:

bookname=侠盗飞车.txt">侠盗飞车小说

后台代码:

using System.IO;    //输写文件需要引用

using System.Text;  //打印文本需要

   string bookname = Request["bookname"].ToString();   //获取传过来的值

    //通过小说名称获取到小说内容

            FileStream f = File.Open(Server.MapPath("~") + "/books/" + bookname, FileMode.Open);    //【FileStream】文件流   Server.MapPath("~")是取绝对路径 ,FileMode.Open 是 文件模式.打开

            //要设置编码不设置编码会报错,而且文本文件可能还需要另存为utf-8的格式

            StreamReader sr = new  StreamReader(f, Encoding.UTF8);   ////StreamReader 是io流的流阅读器  Encoding:是编码的意思

            Response.Write("

" + bookname + "

");

            while (!sr.EndOfStream) //判断是否读取完了

            {

                string content = sr.ReadLine();  //每行去读取

                Response.Write(content);

                Response.Write("


");

            }

            sr.Close();  //用完需要关闭

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  /***********************************io流----获取页面触发异常是,将信息写入记事本中,习惯放在全局变量里面,*************************************/ 

    //获取发生异常信息

            string errorMsg = Server.GetLastError().InnerException.Message;

            //获取异常发生的页面

            string rewUrl = Request.RawUrl;

            //错误发生时间

            //记录一个日志(写错误信息到文件)

            string url = Server.MapPath("~/log/log.txt");

            FileStream fs = new FileStream(url, FileMode.Append);

            StreamWriter write = new StreamWriter(fs);             //字符串写入流

            write.WriteLine("错误发生页面:" + rewUrl);

            write.WriteLine("错误发生时间:" + DateTime.Now.ToString());

            write.WriteLine("错误发生信息:" + errorMsg);

            write.WriteLine("---------------------------------");

 

            write.Close();

            fs.Close();

 

            //清空异常

            Server.ClearError();

            Response.Redirect("Error.aspx");

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//其他常用访问:比如所有的txt文件

                    string[] filenames = Directory.GetFiles(Server.MapPath("~") + "/books/", "*.txt");

 

                    //创建一个文件夹访问类

                    DirectoryInfo di = new DirectoryInfo(Server.MapPath("~") + "/books/");

                    //得到该文件夹下所有文件

                    foreach (FileInfo item in di.GetFiles())

                    {

                        string filename = item.Name;//所有文件夹名

                        //区文件名不包括后缀

                        string needname = filename.Substring(0, filename.IndexOf('.'));

                    }

 //--------------------------------------------------------------------------------------比如下面这段代码:图片img文件的上传------------------------------------------------------------

                string newfliename = "空或者给一张默认图片"; //定义一张打印给页面的图片名称

                //判断是否有文件上传,文件数量Count【计算,总数】

                if (Request.Files.Count > 0)

                {

                    string fliename = Request.Files[0].FileName;//获得文件名

                    if (!string.IsNullOrWhiteSpace(fliename)) //前面加了个!表示非空

                    {

                        string filepath = "~/img/" + fliename;     //文件路径赋值给变量,下面用来判断文件是否存在

 

                        //判断服务器文件是否存在

                        /*if (System.IO.File.Exists(Server.MapPath(filepath))) //如果(文件存在)

                        {

                            //System.IO.Directory.Delete(Server.MapPath("filepath"), true);//删除文件夹

                            //System.IO.File.Delete(Server.MapPath(filepath));//删除文件

                        }*/

 

                        int num = fliename.LastIndexOf("."); //从右向左索引到文件名的点“.”的位置;/*indexOf(从前往后查)和 lastIndexOf(从后往前查) 都是连续索引文件的意思*/

                        string str = fliename.Substring(num + 1).Trim().ToLower();//获取文件后缀名;以点后面一位开始截取字符串

                        string guif = Guid.NewGuid().ToString();//产生一个随机不重复的字符串

 

                        newfliename = guif + "." + str; //把新文件名名称赋值

 

                        //三目运算符,判断文件是否存在(newfliename = 存在?新的文件名:原始文件名)

                        newfliename = System.IO.File.Exists(Server.MapPath(filepath)) ? newfliename : fliename; 

 

                        if (str == "png" || str == "jpg" || str == "gif")

                        {

                            string fullname = Server.MapPath("~") + "/img/" + newfliename; //获取绝对路径//构建一个完整的路径Server.MapPath("~")

                            Request.Files[0].SaveAs(fullname);          //保存上传的文件,到指定位置

 

                        }

                        else

                        {

                            Response.Write("");

                            return;

                        }

                    }     

                }

 /***********************************************************************************************************************************************************************************************************************/              

------------------------------------------------------------------------------------------------------------------------------可以在后台操作的一些HTML代码

            //html编码操作

            Response.Write("
");

            Response.Write(Server.HtmlEncode("

我是标题

"));

            //html解码操作

            Response.Write(Server.HtmlDecode("

我是标题

"));

            //URL编码与解码  解决中文乱码问题,起到一个简单的加密作用

Image1" CssClass="myimg" ImageUrl="~/img/cfop.jpg" runat="server" />

            Response.Write("图片的路径:" + Image1.ImageUrl);   //打印图片路径

            Response.Write("
");

            //给路径编码和解码

            string urlcode = Server.UrlEncode(Image1.ImageUrl);

            Response.Write("对url进行编码操作:" + urlcode);

            Response.Write("
");

            Response.Write("对url进行解码操作:" + Server.UrlDecode(urlcode));

*******************************************************************************************以上是我一些常用到的基础,太多了,后面在继续发布,看着有点乱,但是我看懂就行了,其实每个人在学习过程中,都要习惯性做自己的笔记,只有自己写出来的代码才属于自己,

别人的你只能东拼西凑。往往某个知识点个人感觉费劲好长时间查百度,好不容易搞懂了,久而久之不用又忘了,又得浪费时间去找度娘。到不如一直更新自己案例,不断的完善自己的一个项目来的实际, 这样的笔记,在你想用什么功能,马上可以看对应的代码。

下期发布内容:

三层架构:

USL: user show layer 用户显示层
BLL: business logic layer 业务逻辑层 处理逻辑的 (server)
DAL: data accesss layer 数据访问层 (dao)
Model: 进行各层之间数据交互

三层架构的优点

1:有利于团队开发
2: 降低耦合性,提高扩展性与可维护性

 

你可能感兴趣的:(asp.net编程基础)