黑马程序员_学习日记21_ASP.Net中级
来源:互联网 发布:华云数据是民营还是 编辑:程序博客网 时间:2024/05/08 18:42
1、虚拟路径:
l 特殊路径标识“~”
HyperLink控件可以识别“~”
推荐资源定位都使用~从应用根目录开始定义。
l 编程处理“~”
如果在服务器端控件中(使用runat=server的控件)会自动将“~”进行转换,如果在HTML控件或者需要在代码中转换的话可以使用VirtualPathUtility.ToAbsolute(“~/a/b1.aspx”)就是将虚拟路径转换为相对于应用根的全路径,也就是/WebSite4/a/b1.aspx
2、Request对象:是Page类的一个属性
Request.AppRelativeCurrentExecutionFilePath获得当前执行请求相对于应用根目录的虚拟路径,以~开头,比如“~/Hander.ashx”
Request.PhysicalApplicationPath获得当前应用的物理路径
3、Response对象
l 响应的缓冲输出:为了提高服务器的性能,ASP.Net向浏览器Write的时候并不会每Write一次就会立即输出到浏览器,而是会缓存数据,到合适的时机或响应结束才会将缓存区的数据一起发送到浏览器
l Response对象的主要成员:
Response.Buffer、Response.BufferOutput:经过Reflector反编译,发现两个属性是一样的,用来控制是否采用响应缓存,默认是true。
Response.Flush()将缓冲区的数据发送给浏览器。这在需要将Write出来的内容立即输出到浏览器的场合非常适用。例:
for (int i = 0; i< 20; i++)
{
System.Threading.Thread.Sleep(500);//将?当Ì¡À前¡ã线?程¨¬挂¨°起e指?定¡§的Ì?时º¡À间?
context.Response.Write("第̨²" + i +"步?完ª¨º成¨¦!ê?<br/>");
//每?执¡ä行D一°?步?将?缓o存ä?中D的Ì?数ºy据Y立¢¡é即¡ä输º?出?;ê?否¤?则¨°每?一°?步?执¡ä行D的Ì?数ºy据Y都?放¤?在¨²缓o存ä?中D,ê?一°?次ä?性?输º?出?
context.Response.Flush();
}
Response.Clear()清空缓存区中的数据,这样在缓存区的没有发送到浏览器端的数据被清空,不会发送到浏览器。
Response.Cookies返回给浏览器Cookie信息
Response.OutputStream输出流,处理图片、下载的文件等
Response.End终止响应
Response.Redirect重定向浏览器到新的网址。这个过程经历了服务器通知浏览器“请重新访问url这个网址”和浏览器接到命令访问新网址的过程。后面会用来防止刷新浏览器时提示“重试”。
4、Server对象:是context的一个属性,是HttpServerUtility类的一个对象
l Server.HtmlDecode()、Server.HtmlEncode()、Server.UrlEncode()、Server.UrlDecode()是对HttpUtility类中相应方法的一个代理调用。个人推荐使用HttpUtility,因为有的地方很难拿到Server对象。
l Server.Transfer(path)内部重定向请求。(注意和Response.Redirect的区别)。Server.Transfer(“JieBanRen.aspx”)将用户的请求重定向给JieBanRen.aspx处理,是服务器内部的接管浏览器是意识不到这个接管的。
5、HttpHandler是对请求的响应,可以输出普通的html内容,也可以输出图片、文件。
l 设置起始页:右键“项目名称”→属性→Web→启动操作→当前页
6、WebForm
可以在aspx中写C#代码,须加<% %>
codebehind是什么?
7、Page类成员
Request、Response、Server属性,对context.Request、context.Response、context.Server的简化调用。
AppRelativeVirtualPath属性:获得页面相对于应用根路径的路径,比如:~/Default.aspx
FindControl(ctrlId),根据控件的Id找到控件。一般情况下直接在代码中写控件Id引用控件就可以了,但对于有些场合,使用ListView等控件的模版、编写自定义控件等则需要使用FindControl来引用控件,FindControl返回值是Control,一般需要显式转换为相应的控件。例:TextBox txtBox =(TextBox)FindControl(“TextBox1”);txtBox.Text= “aaa”;
IsPostBack、Session
ResolveClientUrl(url)将虚拟路径转换为客户端访问时的路径,比如ResolveClientUrl(“~/a/b.aspx”)结果是/a/b.aspx,这通常在ListView等控件的模板中输出HTML使用。
ResolveUrl(url)将虚拟路径转换为相对于网站根目录的路径,比如:
ResolveUrl(“~/a/b.aspx”)的结果是/WebSite4/a/b.aspx。不考虑当前页面,基本就是对VirtualPathUtility.ToAbsolute简化调用,直接转换为一个全路径。
8、ASP.Net服务端基本控件
l 服务端控件在内网系统、互联网的后台部分等访问频率不高的地方用很合适。
l 所有的ASP.Net控件大部分都是从Control、WebControl类继承,这两个类公用的成员有:
(1)ClientID,控件在客户端的Id,控件在服务端的Id不一定等于客户端HTML中的Id,比如说在ListView等控件的模板中。因此如果要在客户端通过JavaScript、Dom、JQuery的getElementById、$(“#id”)来操作控件的话最好不要直接写服务端的Id,而是$(“#<%txt1.ClientID%>”)。在用户控件(UserControl)中可以看到ClientID和Id的不同
(2)Visible属性,控件是否可见。如果Visible=False是不会渲染到HTML中的(表示没有),这和在HTML中给元素style.display=’none’效果是不一样的(表示隐藏)。
(3)CssClass属性,控件的样式名,就是HTML中控件的class属性。
(4)Attributes,用来设置获取控件的额外属性。
l (1)服务端Label控件在客户端渲染成<span>,如果设置了AssociatedControlID则渲染成Label
(2)Literal控件也是展示一段文本,但Literal控件不会渲染任何的标签,就是将Text的属性的值展示出来而已。将mode属性设为encode就会自动将内容encode,避免XSS攻击。
(3)TextBox控件。TextMode属性取值SingleLine、MultiLine、Password。当AutoPostBack属性为true时,用户焦点离开TextBox就会造成页面Post,实现原理就是讲ASP.Net原理时的AutoPostBack。TextChanged事件,文本发生变化时事件触发
(4)RadioButton控件,通过GroupName属性进行分组
(5)Button、LinkButton、ImageButton控件。OnClientClick属性,当用户点击按钮的时候在浏览器端执行的代码,注意OnClientClick是字符串属性,写的代码是JavaScript代码,运行在浏览器端。都有CommandName、CommandArgument、两个属性和Command事件,可以让多个按钮共享一个Command事件处理函数,通过读取事件对象e的CommandName、CommandArgument两个属性读取被点击按钮上设置的这两个参数来执行不同的操作。例子:编辑、删除多行数据。这种用法在ListView等控件中用的最多。
(6)Panel控件,用来盛放一些控件。如果设定GroupingText属性那么就渲染为含有<fieldset>的<div>标签,也就是GroupBox效果,否则渲染为<div>
(7)FileUpload控件,文件上传控件。渲染成input(type=file)。属性:FileContent以流的形式获得上传的文件;FileName上传文件名;HasFile属性:用户是否选择了文件。SaveAs方法用于将文件保存到磁盘的指定位置。漏洞:文件上传漏洞(上传aspx),即臭名昭著的WebShell。预防漏洞的方法:只允许上传指定类型的文件,上传文件夹不给执行权限。
9、三种控件
(1)HTML控件,ASP.Net把HTML控件当成普通字符串渲染到客户端,不进行处理
(2)ASP.Net服务端控件,
(3)带有runat=”server”的服务端HTML控件。
10、验证控件
l RequiredFieldValidator:字段必填
ControlToValidate设定要验证的控件,Text属性为当被验证的控件属性为空时显示的错误信息,Text不仅可以写普通文本,还可以写任何HTML内容
l RangeValidator:值在给定的最大值、最小值之间
CompareValidator:用于比较两个值的关系是否满足要求或者是否是指定类型的数据
RegularExpressionValidator:验证数据满足正则表达式
CustomValidator:自定义验证
l 所有Validator的共性:
页面中的IsValid属性用来判断页面中的所有Validator是否都通过校验,只有都校验通过才能为True,即使页面中的Validator服务端校验报错(禁用JavaScript跳过客户端校验),在服务端方法中的业务代码(比如btn_Click)也会被执行,因此如果代码在数据校验不通过的不能执行则需要判断IsValid的值。
所有验证控件都有Display属性,用来决定如何显示错误信息。三个值:Static:没有错误信息的时候控件的visibility样式为hidden来实现隐藏;Dynamic:没有错误信息的时候控件的display样式为none来实现隐藏。这两者的区别是visibility:hidden隐藏控件任然为占据控件,display:none隐藏则不会占用控件。Display属性还可以设置为None(用来配合后面讲的ValidationSummary)
如果一个页面中同时放置注册和登录表单,那么他们的验证就会同时进行,这样虽然只是登录,但是注册的验证也会触发,可以使用验证组来解决这个问题,将同一组的控件(表单、提交按钮、Validator等)的ValidationGroup设为相同的值就可以
我的思考:
1、
(1)string fullpath =HttpContext.Current.Server.MapPath("~/images/MouseMove.jpg");
fullpath得到的路径是g:\资料\visualstudio 2010\WebSites\WebSite1\images\MouseMove.jpg
(2)string fullpath =HttpContext.Current.Server.MapPath(VirtualPathUtility.ToAbsolute("~/images/MouseMove.jpg"));
fullpath得到的路径是g:\资料\visualstudio 2010\WebSites\WebSite1\images\MouseMove.jpg
分析:
HttpContext.Current.Server.MapPath返¤¦Ì回?与®? Web 服¤t务?器¡Â上¦?的Ì?指?定¡§虚¨¦拟a路¡¤径?相¨¤对?应®|的Ì?物?理¤¨ª文?件t路¡¤径?。¡ê
VirtualPathUtility.ToAbsolute将?虚¨¦拟a路¡¤径?转Áa换?为a应®|用®?程¨¬序¨°绝?对?路¡¤径?。¡ê
结论:
HttpContext.Current.Server.MapPath也能识别带“~”的虚拟路径,或其内部调用了VirtualPathUtility.ToAbsolute
2、IDbCommand和SqlCommand的区别:
IDbCommand 表示连接到数据源时执行的 SQL语句,并且是由访问关系数据库的 .NET Framework数据提供程序实现的。
SqlCommand表示要对 SQL Server数据库执行的一个 Transact-SQL语句或存储过程。此类不能被继承。
- 黑马程序员_学习日记21_ASP.Net中级
- 黑马程序员_学习日记20_ASP.Net初级
- 黑马程序员_学习日记11_asp.net初探之视图状态
- 黑马程序员_学习日记26_ASP.NET使用验证控件
- 黑马程序员_学习日记27_ASP.NET使用Rich控件
- 黑马程序员_学习日记9_ASP.NET服务器处理过程_一般处理程序_复习HTML标签
- 黑马程序员_Asp.net缓存学习总结
- 黑马程序员_学习笔记10_asp.net初探之一般处理文件模型
- 黑马程序员_学习笔记13_asp.net之Session原理解析
- 黑马程序员_学习笔记14_asp.net之Cookie原理解析
- 黑马程序员_学习笔记15_asp.net之验证码实现原理初探
- 黑马程序员_学习笔记23_ASP.NET中aspx 和 aspx.cs之间的关系
- 黑马程序员_ASP.NET初探
- 黑马程序员_学习日记5_ADO.Net入门1
- 黑马程序员_学习日记6_ADO.Net入门2
- 黑马程序员_学习日记15_ADO.Net之DataSet
- 黑马程序员_asp.net mvc 路由
- 黑马程序员_Asp.Net防盗链
- 01.部署NopCommerce时遇到的问题
- JSP生产静态页面
- 程序员必知8大排序3大查找(一)
- 网络知识
- 编程珠玑 11章 排序
- 黑马程序员_学习日记21_ASP.Net中级
- 高质量编程C/C++
- 虚拟机安装和设置
- LUA实现状态模式
- Redis学习手册(目录)
- 数据库设计三大范式应用实例剖析 .
- FreeSWITCH中lua实例1:实现呼叫中心中电话接通前播放坐席号码的效果
- 13周任务3
- 使用 PHP 直接在共享内存中存储数据集