1. 验证一般要做客户端js验证及服务器端验证
微软的验证控件会自动生成客户端js脚本以及服务器端验证代码。
Page.IsValid:当页面上所有的验证控件在服务器端严重通过后,该属性为true,
为了防止用户的恶意攻击及禁用掉js,一定要在服务端判断Page.IsValid是否为true,再执行其他的逻辑代码。
验证控件生成的服务器端验证代码,默认是在Page_Load事件之后执行。所以在Page_Load事件中不能调用Page.IsValid,会报错。Page.IsValid要在button事件中调用。
Page.IsValid:在服务器端指示前端的所有验证控件是否验证通过.如果前端有服务器端控件,就必须在后端判断这个属性.
注意:验证控件在服务器端验证是在:Page_Load事件之后,更深层事件之前执行.比如你点击了一个按钮:在服务器端: 先执行Page_Load事件,再执行验证控件的验证方法,最后执行按钮的click事件
Page.Validate();//如果要想在Page_Load事件用使用Page.IsValid,那么必须先执行这个方法让验证控件进行验证.
if(Page.IsPostBack)
{
Page.Validate();
bool b=Page.IsValid;
}
验证控件的一般属性:
Display:
none 不显示错误信息,只在验证汇总控件中提示。
static:不显示也占位
dynamic:不显示不占位 通过 display:none样式实现
SetFocusOnError:当该验证控件没有通过验证时,自己获得焦点.
注意:在我们的验证控件中,只有非空验证控件可以在用户不输入任何内容的情况下触发验证,其他验证控件只有在输入的内容为非空时才触发.
汇总验证控件: ValidationSummary
ShowSummary: 以文本的形式显示错误信息
ShowMessageBox:以模式对话框的形式显示错误信息
ErrorMessage: 是为汇总错误控件提供错误信息的
Text: 才是真正的显示在被验证控件旁的错误信息
CausesValidation :
所有提交的按钮都有一个属性叫:CausesValidation 这个属性指示该按钮是否触发验证控件
ValidationGroup:
当需要点某个按钮,个别验证控件进行验证时,则需要设置按钮和验证控件的ValidationGroup
2.当服务器控件处于模板中或者母版中,控件生成的html代码里的id就会发生变化,此时需要使用ClientID来获取生成的id,如果不处于母版或者模板中,一般不会发生变化。
每一个服务器控件都有ClientID这个属性
如:document.getElementById("<%=TextBox1.ClientID%>");
3. 导航控件: 1.SiteMapPath 2.TreeView 3.Menu导航菜单 注意:导航控件一般用在母版中,不然每个页面都用导航控件很麻烦。
1)SiteMapPath 面包屑导航 眉毛导航
需要一个 站点地图为其提供数据 (web.sitemap)
站点地图只能在网站根目录,并且名称只能是web.sitemap
站点地图其实就是一个xml文件,只不站点地图对xml文件中的节点是有要求的:
A)根节点必须是siteMap节点
B)在根节点下有且只能有一个 siteMapNode 节点,这个节点代表我们网站的首页(主页) 这个节点有三个属性: url 指示首页地址 title: 文字显示 description: 鼠标放上去的提示文字
C)在B节点下面,就可以根据网页的层次关系来一层一层的套siteMapNode,每一个siteMapNode 节点表示一个网页
2)TreeView
需要站点地图web.sitemap做数据源或者是xml文件做数据源
3)Menu,数据源与TreeView一样,可以是站点地图,也可以是xml文件
4.三层架构工程搭建
1.建立一个空的解决方案
2.web层即表现层,在此解决方案下建立一个Asp.net web应用程序
3.BLL,DAL,MODEL,在此解决方案下分别建立三个类库项目
4.添加相互的引用。
5.
在GridView中用BouldField绑定的内容时,通过下面得数据
GridView1.Rows[2].Cells[0].Text
在GridView中用BouldField绑定的内容时,当GridView处于编辑状态时,BouldField此时是个TextBox文本框,如何获得TextBox中用户输入的内容:
((TextBox)GridView1.Rows[2].Cells[0].Controls[0]).Text;
在GridView中,获得模板列中某个控件的值时,使用FindControl("")来得到这个控件
当使用BouldField绑定数据,这一列如果被隐藏的话,那么隐藏的值无法获得到.一般ID使用BouldField绑定,但又不想让用户看到,怎么办?
可以转成模板列
如果在GridView控件中,一个按钮的CommandName为
edit时,则会自动触发GridView编辑功能
cancel时,则会自动触发GridView取消编辑功能
delete时,则会自动触发GridView删除功能
update时,则会自动触发GridView更新功能
6.asp.net中常用的数据绑定控件,功能越强大,效率越低,Repeater效率最高,DataList次之,ListView效率最低
1.ListView
2.GridView
3.DataList
4.Repeater
上面四个都是绑定List中的数据。
5.DetaisView 用于展示一条数据的详细信息
6.FormView也是拥有展示一条记录,只不过必须得用模板。
7. Response.Redirect("default.aspx?msg="+Serve.UrlEncode("成功"))//超链接传参中文的处理方式。
8. Response.Redirect("admin/login.aspx");//当前文件夹下的admin文件夹里的login.aspx文件,是一个相对路径。
Response.Redirect("~/admin/login.aspx");//网站根目录下admin文件夹里的login.aspx文件,是一个应用目录
Response.Redirect("/admin/login.aspx");//网站根目录下admin文件夹里的login.aspx文件,是一个绝对目录。
由于母板页和用户控件可以被其他任何目录中的普通页面使用,所以在写母板页和用户控件时,最好用绝对路径或应用路径来指明相关的文件路径.
~/只有服务器端控件才可以用,如果是html标签,就不能用,必须用下面的方法,转成~/才可以
ResolveClientUrl 如果是非服务器控件,可以使用这个转换路径。
ResolveUrl
路径:/ ~/ ./ ../ ../../
./和直接写文件名一样,.代表当前目录 ,./即当前目录下的文件
即:<img src="./aa.jpg" />
<img src="aa.jpg" /> 两种写法是等价的
../相对路径,当前页面所在的路径的上一级
../../ 当前页面所有的路径的上一级的上一级
~/ 网站应用的根目录,即bin文件所在的目录,
http://www.ccctv.com/abc/index.html
红色:叫域名
绿色:叫目录或虚拟目录
蓝色:叫文件名
/表示网站根目录,域名后就是网站根目录
~/表示应用目录 就是bin所在的目录.有可能是网站根目录,也有可能是虚拟目录,虚以目录可以做网站的应用目录
如果是虚拟目录: ~/和/的意义就不一样了
虚拟目录是IIS中绑定的网站对外发布的网址。
10. 自动登录的实现:
方法一:
在用户表中,再添加一个字段,akey,当用户选中记住我时,生成一个Guid,放入当前登录用户后对应的数据库表记录中,并把这个akey存入用户cookie.
当用户下次没登录访问时,我们可以从cookie中得到这个akey, 从数据库中查询得到这个akey对应的用户名和密码,自动把这个用户实体写入Sesssion["currUser]
好处:安全性比较好,因为客户端没有任何用户资料.
缺点:只能在一台电脑上实现记住我,不能让两台电脑同时记住我.
方法二:
我们就把用户名和密码写入到客户端.由于向客户端写资料了,所以我们要进行加密.
1)随机产生一个两位的字母 s
2)设用户的数据库中的密码为:p
3)向客户端存的密码为: s+Md5(s+md5(p))
把用户名和密码写入到客户端.
下次再登录时,只需要读出cookie中的用户名和密码,然后根据用户名从数据库中得到该用户名所对应的密码,然后把这个密码按照上面的算法加密.然后对比是否相同,如果相同,则这个cookie是我们写入的.让用户自动登录.
11.分页
select * from books;//无行号
select (Row_number() over(order by id)) as 'rownumber' ,* from books;//Row_number()函数,加入行号,并按id排序,并取名为rownumber
查出的数据第一列有个行号rownumber
之后把查出来的数据作为一个结果集t:
select (Row_number() over(order by id)) as 'rownumber',* from books as t
或者
select (Row_number() over(order by id)) as 'rownumber',* from books t
select * from
(select (Row_number() over(order by id)) as 'rownumber',* from books as t) where rownumber between 21 and 30
12.如何把第三方的控件加入到工具箱中:
1)在工具栏上点右键,->选择项
2)在.net组件中可以找已经注册的控件.如果没有注册,则可以通过浏览去查找.如ckeditor,加入bin目录下的的dll即可,以后就可以拖控件直接使用,同时把相应的样式等文件拷贝到根目录下
Ckeditor不能上传图片,只能引用网上的图片,CkFinder可以上传图片,但是是收费的,ewebeditor是基于asp,支持上传图片,如果要上传图片,建议用ewebeditor