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出现,表示页面点击提交按钮,第二次加载显示出来的
<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: 降低耦合性,提高扩展性与可维护性
asp.net编程基础的更多相关文章
- 16第一章 ASP.Net编程基础知识
第一章 ASP.Net编程基础知识 第一章 ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...
- ASP.NET Core 基础教程总结 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 基础教程总结 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 基础教程总结 ASP.NET Core 基础教程总算是有了个简单 ...
- ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...
- ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新增用户 上一章节我们实现了一个注册表单,但也留了一些东西还没完成, ...
- ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 用户注册 上一章节我们终于迁移完了 Identity 的数据,也创建 ...
- ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 迁移数据 上一章节中我们配置了 ...
- ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 配置 上一章节我们简单介绍了下 Id ...
- ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...
- ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 框架 前面我们使用了 N 多个章节, ...
随机推荐
- noi.ac #44 链表+树状数组+思维
\(des\) 给出长度为 \(n\) 的序列,全局变量 \(t\),\(m\) 次询问,询问区间 \([l, r]\) 内出现次数为 \(t\) 的数的个数 \(sol\) 弱化问题:求区间 \([ ...
- LibreOJ #6212. 「美团 CodeM 决赛」melon
二次联通门 : LibreOJ #6212. 「美团 CodeM 决赛」melon /* LibreOJ #6212. 「美团 CodeM 决赛」melon MDZZ 这是决赛题?? */ #incl ...
- [WEB安全]XSS命令总结
一:正常构造方式: 1.无过滤,直接写: <script>alert(1)</script> 2.正常截断: "> <script>alert(1) ...
- mysql数据库出现无法登录(ERROR 1045 ),预防和解决及系列问题解决方法。
一 .当在windows下使用mysql数据库时,出现无法登录的现象,需要修改mysql数据库的roo密码时,我们可以使用一下两种方法. 1. (1)关闭mysql服务.然后在bin目录下使用cm ...
- Authentication failure. Retrying - 彻底解决vagrant up时警告
碰到的问题 使用vagrant启动虚拟机时,出现如下警告: vagrant up default: Warning: Authentication failure. Retrying... 原因分析 ...
- 和重复搭建开发环境说 Bye Bye 之Vagrant
每每新同事入职,都要在自己电脑上配置一堆环境,费神费力:每每开发测试都要重新配置开发环境,手工搭建,步骤很繁琐,极易出错. 大神在时,大神搭建,大神不在,以手抚膺坐长叹.为此,VVVVVagrant横 ...
- 根据udev的信息判断设备物理路径
udev会生成by-path路径,根据这个就可以判断 dev目录下 [toybrick@localhost dev]$ find | grep platform-fe3c0000 ./disk/by- ...
- linux下查看指定进程的所有连接信息(转)
定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息.通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到,如果是主动与别的机器建立的连接信息则可以通过 lsof ...
- Faster async functions and promises
https://v8.dev/blog/fast-async async function computeAnswer() { return 42;}undefinedconst p = comput ...
- Xamarin图表开发基础教程(1)
Xamarin图表开发基础教程(1) 在Xamarin图表开发中,最常用的框架是OxyPlot和Microcharts.其中,OxyOPlot提供多种多样的图表类型和丰富的图表功能,可以实现各种复杂的 ...