.net编程基础
.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出现,表示页面点击提交按钮,第二次加载显示出来的
<div class=”aspNetHidden”></div>
二:表单的提交方式:
1:get
传值方式不同:地址栏
设计初衷不同:get用来获取数据,也能传数据,告诉服务器想要什么数据
传送数据大小不同:1kb
2:post
传值:放到内容,地址栏看不到
Post:用于传递数据
传送数据大小不同:2m
如果传送文件:必须用post
三:系统对象:Request 是由客户端发起的一个请求; response 响应给客户
方法1: 用于获取get传值 Request.QueryString[“name”]
方法2:用于获取post传值 Request.Form[“name“]
方法3:用户获取get或post传值 效率最慢 每次都要重新构建一个集合 Request.Params[“name“]
方法4:用户获取get或post传值 如果get post同时存在取get 效率次之如果开始没找到需要遍历4个集合 Request[“name“]
Response.Write(“<script>alert(‘页面是第一次加载’)</script>“); // js脚本弹窗 alert【警报】Response【响应,(口头或书面的)回答,答复】;Write【书写;写字;写作;作曲;编写;写信】
//从服务器传给浏览器用【response】服务器响应给浏览器,从浏览器传给服务器用【request】请求。
Response.Write(“请求方式:” + Request.RequestType + “<br/>”);
Response.Write(“用户地址ip:” + Request.UserHostAddress + “<br/>”);
Response.Write(“用户使用的浏览器:” + Request.UserAgent + “<br/>”);
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(“<br/>用时:”+(DateTime.Now – shijian).TotalMilliseconds + “毫秒<br/>“);
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流:
<a href=”BookRead.aspx?bookname=侠盗飞车.txt”>侠盗飞车小说</a>
后台代码:
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(“<h3>” + bookname + “</h3>”);
while (!sr.EndOfStream) //判断是否读取完了
{
string content = sr.ReadLine(); //每行去读取
Response.Write(content);
Response.Write(“<hr/>”);
}
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(“<script>alert(‘只能上传图片,你上传的不是图片!’)</script>”);
return;
}
}
}
/***********************************************************************************************************************************************************************************************************************/
——————————————————————————————————————————可以在后台操作的一些HTML代码
//html编码操作
Response.Write(“<br/>”);
Response.Write(Server.HtmlEncode(“<h2>我是标题</h2>”));
//html解码操作
Response.Write(Server.HtmlDecode(“<h2>我是标题</h2>”));
//URL编码与解码 解决中文乱码问题,起到一个简单的加密作用
<asp:Image ID=”Image1” CssClass=”myimg” ImageUrl=”~/img/cfop.jpg” runat=”server” />
Response.Write(“图片的路径:” + Image1.ImageUrl); //打印图片路径
Response.Write(“<br/>”);
//给路径编码和解码
string urlcode = Server.UrlEncode(Image1.ImageUrl);
Response.Write(“对url进行编码操作:” + urlcode);
Response.Write(“<br/>”);
Response.Write(“对url进行解码操作:” + Server.UrlDecode(urlcode));
*******************************************************************************************以上是我一些常用到的基础,太多了,后面在继续发布,看着有点乱,但是我看懂就行了,其实每个人在学习过程中,都要习惯性做自己的笔记,只有自己写出来的代码才属于自己,
别人的你只能东拼西凑。往往某个知识点个人感觉费劲好长时间查百度,好不容易搞懂了,久而久之不用又忘了,又得浪费时间去找度娘。到不如一直更新自己案例,不断的完善自己的一个项目来的实际, 这样的笔记,在你想用什么功能,马上可以看对应的代码。
下期发布内容:
三层架构:
USL: user show layer 用户显示层
BLL: business logic layer 业务逻辑层 处理逻辑的 (server)
DAL: data accesss layer 数据访问层 (dao)
Model: 进行各层之间数据交互
三层架构的优点
1:有利于团队开发
2: 降低耦合性,提高扩展性与可维护性
Server的跳转方式
Server.Execute:把跳转后的页面内容拿到跳转前的页面合并 Server.Transfer:把跳转前的页面内容拿到跳转后的页面合并
Response.Redirect:直接跳转到新的页面