asp.net服务器数据源控件学习笔记
1.数据绑定控件的DataSource属性只能接受三种接口类型的数据
(IListSource,IEnumerable,IDataSource)
2.要手动在已经绑定数据的数据绑定控件上添加自定义的数据:
this.DropDownList1.AppendDataBoundItems = true;
this.DropDownList1.Items.Add("请选择");
如果没有第一句代码,在生命周期中的Render方法生成控件树时,DropDownList添加数据的方式是覆盖的,会将之前的数据覆盖掉,设置为true之后,添加数据的方式变为追加方式,不会覆盖之前的数据(限制性Page_Load在执行Render)
3.Repeater其实是一个for循环,从对象数据源拿到实体对象列表之后,会对这个对象列表进行for循环,每一次循环都会执行xxxxTemplate标签里面的html代码
好处:可以自己定义需要循环的内容,不必像之前服务器自己生成的那么繁杂
4.在为服务器控件的属性设置值的时候, 如果出现 string + <%#Eval("id")%> ,则一定要修改为:
<%# string + Eval("id")%>。
否则,服务器控件的属性,会把 <%当字符串转义的。
5.Eval方法是单向绑定(负责显示),Bind方法是双向绑定 ~~(负责显示,也负责修改数据)!
6.Repeater的ItemCommand事件:当Repeater控件里面向服务器提交表单时触发,在前台可以标签中使用CommandArgument(里面放要传的值)和CommandName(要执行的操作类型,如:Delete,Modify)属性来设置,在后台的ItemRepeater事件中可以通过e.CommandArgument和e.CommandName接收到
7.Repeater大部分用来展示数据,要进行增删改查用 比较简单
ListView里面通过DataKeyNames设置列的主键
普通使用ListView:使用ObjectDataSource对象数据源控件配置数据源和方法,之后使用ListView数据绑定控件与ObjectDataSource控件绑定
使用异步ListView:需要一个ScriptManager和UpdatePanel的AJAX扩展控件,还是使用ObjectDataSource,ListView,使用方法同上(ScriptManager和ObjectDataSource在UpdatePanel外面,ListView在里面)
ListView找数据源控件要数据,拿到数据之后交给DataPager决定要显示哪些数据(DataPager负责生成页码条,并控制显示在ListView里面的数据行数)
ListView搭配DataPager控件实现的分页是一次性从数据库拿到所有的数据,然后再截取适当的部分显示出来,在数据很大的时候是非常没有效率的,应该在查询数据的时候只查询需要显示的那一部分的数据
使用ListView高效分页
8.母版页与子页面的关系:先执行子页面的PageLoad在执行母版页的PageLoad
9.页面生命周期中有用的方法(按顺序):
LoadAllState:将表单隐藏域_VIEWSTATE里的数据设置在页面对象的ViewState属性中
ProcessPostData:将表单里提交的控件数据设置给控件树中对应控件的属性中
PageLoad:调用程序员在后台的PageLoad方法中编写的代码(此时已经能访问控件树中的属性了,通过这个在得到浏览器控件里面输入的数据)
ProcessPostDataSecond:再次为控件树里面的控件设置浏览器提交过来的值(主要是为了新增加的控件)
Rend:遍历控件树,生成html代码
10.Cache:
与Appplication原理差不多,都可以由服务器的一个静态字典集合实现。
与Session的区别:Session区分各种不同的浏览器,只有对应的浏览器可以访问,Cache则是所有的人都可以访问
12.整页缓存:会将动态页面生成的html代码存入服务器缓存区,当浏览器再次请求时,服务器不会执行页面的生命周期,而是直接从缓存区中拿到上次生成的html代码发回给浏览器
当使用整页缓存时可以根据页面url的不同参数来设置不同的页面缓存版本。
如:<%@OutputCache Duration="20" VaryByParam="id"%>
Duration="20" 设置缓存的时间(以秒为单位)
VaryByParam="id" 设置根据页面url的参数生成的缓存版本
13.数据源缓存:只是将数据源控件所查询到的数据放入缓存区,是一种局部缓存,当浏览器在此请求时,服务器还是会执行页面的生命周期,只是不在从数据库中查询所需要的数据,而是从缓存区中拿到该数据并交给相应的控件,然后生成html代码发回给浏览器
设置方法:在前台页面的数据源控件代码中,EnableCache="true"(启用)CacheDuration="20"(20秒)
14.自定义的缓存:在后台代码中,Cache["chubbby"] = "chubby";
15.缓存可以设置
绝对过期时间:10秒之后立即清空缓存
滑动过期时间:10秒之内有新的缓存请求的话,10秒重新计时
带文件依赖的缓存:只要依赖的文件没有被修改,缓冲就不会被清空
16.Session默认是保存在Framework内置的一个程序中(aspnet_wp.exe)缺点是容量小,易丢失
可以手动修改配置文件将Session保存到外置的程序,如:aspnet_state.exe(微软提供) 也可以保存在数据库中(前提是要保存的Session如果是对象的话必须序列化,在类名上添加特性[Serializeable])
在配置文件中<sessionState mode=""></sessionState>
17.全局配置类,可以在其中配置网站运行时出现的任何错误的处理信息(一般用来做错误日志)
在Application_Error方法中:
HttpApplication app = sender as HttpApplication;
Exception ex = app.Context.Server.GetLastError();
string logFile = app.Context.Server.MapPath("04Log.txt");
System.IO.AppendAllText(logFile,ex.Message);
或者一旦出现错误就跳转到自定义的错误页面
app.Context.Response.Redirect("05Err.aspx?err=" + app.Context.Server.UrlEncode(ex.Message));
也可以在全局配置文件类中为请求管道事件注册方法,如在浏览器发送请求之前判断所请求的图片是否为盗链的:
在Application_BeginRequest方法中编写代码
string strPath = app.Context.Request.UrlReferrer;
if(strPath.StartsWith("http://www.baidu.com"))
或者处理黑名单IP
app.Context.Request.UserHostAddress
18.根据错误的状态码跳转到响应的自定义的错误页面
在配置文件中添加
<CustomError mode="on" defaultRedirect="1.aspx">
<error statusCode="404" redirect="2.aspx"/>页面无法找到时
<error statusCode="500" redirect="3.aspx"/>服务器内部异常错误时
</CustomError>
19.HttpModule过滤:
在实现IHttpModule接口的类中可以手动为请求管道的事件注册方法
20.url重写原理:
网站部署后被第一次访问,fw会读取配置文件里面的<Modules>节点,遍历其中的子节点,获取每个过滤器程序集的类创建并转成IHttpModule接口存入一个静态的过滤器集合中,在以后的浏览器每次访问网站时,都会遍历过滤器集合同一调用Init方法向请求管道中注册事件,RewritePath所做的事情就是修改了HttpContext里面包含的请求报文中的请求url
asp.net服务器数据源控件学习笔记的更多相关文章
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
sql server 关于表中只增标识问题 由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...
- Asp.Net Core WebApi学习笔记(四)-- Middleware
Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...
- ASP.NET Core 2 学习笔记(七)路由
ASP.NET Core通过路由(Routing)设定,将定义的URL规则找到相对应行为:当使用者Request的URL满足特定规则条件时,则自动对应到相符合的行为处理.从ASP.NET就已经存在的架 ...
- ASP.NET Core 2 学习笔记(十三)Swagger
Swagger也算是行之有年的API文件生成器,只要在API上使用C#的<summary />文件注解标签,就可以产生精美的线上文件,并且对RESTful API有良好的支持.不仅支持生成 ...
- ASP.NET Core 2 学习笔记(十二)REST-Like API
Restful几乎已算是API设计的标准,通过HTTP Method区分新增(Create).查询(Read).修改(Update)和删除(Delete),简称CRUD四种数据存取方式,简约又直接的风 ...
- ASP.NET Core 2 学习笔记(十)视图
ASP.NET Core MVC中的Views是负责网页显示,将数据一并渲染至UI包含HTML.CSS等.并能痛过Razor语法在*.cshtml中写渲染画面的程序逻辑.本篇将介绍ASP.NET Co ...
- ASP.NET Core 2 学习笔记(一)开始
原文:ASP.NET Core 2 学习笔记(一)开始 来势汹汹的.NET Core似乎要取代.NET Framework,ASP.NET也随之发布.NET Core版本.虽然名称沿用ASP.NET, ...
- ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘
开篇:经历了上一篇<aspx与服务器控件探秘>后,我们了解了aspx和服务器控件背后的故事.这篇我们开始走进WebForm状态保持的一大法宝—ViewState,对其刨根究底一下.然后,再 ...
- ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘
开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...
随机推荐
- hdu 6126 Give out candies
hdu 6126 Give out candies(最小割) 题意: 有\(n\)个小朋友,标号为\(1\)到\(n\),你要给每个小朋友至少\(1\)个且至多\(m\)个的糖果.小朋友们共提出\(k ...
- bzoj 4621 Tc605 思想+dp
4621: Tc605 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 328 Solved: 183[Submit][Status][Discuss ...
- 一元多项式的表示及相加(抽象数据类型Polynomial的实现)
// c2-6.h 抽象数据类型Polynomial的实现(见图2.45) typedef struct // 项的表示,多项式的项作为LinkList的数据元素 { float coef; // 系 ...
- HTML中打开新页面的方法
HTML跳转新窗口的方法 笔试遇到这样的一个问题,特意整理一下. 方法一 纯HTML <a href="http://www.cnblogs.com" target=&quo ...
- mysql-\g和\G的作用
\g 的作用是分号和在sql语句中写’;’是等效的 \G 的作用是将查到的结构旋转90度变成纵向(可以将一个很长的行转为好看的格式) 这两个只能在DOS窗口使用,可视化工具中不能使用. 例如:
- JS多个函数之间传递参数问题
JS多个函数之间传递参数的一个重要思想是在页面定义一个隐藏域,当第一个函数请求到数据时候修改隐藏域的值,第二个函数用jQuery的选择器选择页面中隐藏域的值. 比如: 页面中定义一个隐藏的页号. &l ...
- 推荐几个好用的PHP集成开发环境
(转自:http://blog.sina.com.cn/s/blog_5bd6b45101011bu2.html ) 分类: PHP PHP新手在准备正式开始写PHP代码的时候,不幸的是被PHP的开发 ...
- C++11 lambda表达式(19篇C++11文章)
C++11引入了lambda表达式,使得程序员可以定义匿名函数,该函数是一次性执行的,既方便了编程,又能防止别人的访问. Lambda表达式的语法通过下图来介绍: 这里假设我们定义了一个如上图的lam ...
- RobotFramework自动化4-批量操作案例【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/robotframework/ 前言 有时候一个页面上有多个对象需要操作,如果一个个去定 ...
- hdu 5087(次长上升子序列)
Revenge of LIS II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...