asp.net

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

原文地址:https://www.cnblogs.com/lxboy2009/p/5814117.html