服务器控件使用技巧
2012-05-29 20:35 刘永强 阅读(1084) 评论(0) 收藏 举报RequiredFieldValidator:非空验证控件
用于:必填项
使用方法:
1)拖一个控件
2)设置ControlToValidate属性 (要验证的控件)
3)设置验证控件验证不通过要给用户显示的信息. 一般设置Text属性,当Text属性为空时,显示的内容会自动取ErrorMessage的值
这个控件所独有的一个属性:
InitialValue:设置初始值
验证控件的一般属性:
Display: none 不显示 static:不显示也占位 dynamic:不显示不占位 通过 display:none样式实现
SetFocusOnError:当该验证控件不没有通过验证时,自己获得焦点.
Page.IsValid:在服务器端指示前端的所有验证控件是否验证通过.如果前端有服务器端控件,就必须在后端判断这个属性.
注意:验证控件在服务器端验证是在:Page_Load事件之后,更深层事件之前执行.比如你点击了一个按钮:在服务器端: 先执行Page_Load事件,再执行验证控件的验证方法,最后执行按钮的click事件
Page.Validate();//如果要想在Page_Load事件用使用Page.IsValid,那么必须先执行这个方法让验证控件进行验证.
CompareValidator:
用于比较
第一用法:用于两个控件相互比较
使用步骤:
1)见上面的同用步骤
2)ControlToCompare 设置被比较的控件
3)设置 Operator属性:比较方式
4)设置type属性:比较的类型
注意:在我们的验证控件中,只有非空验证控件可以在用户不输入任何内容的情况下触发验证,其他验证控件只有在输入的内容为非空时才触发.
第二种用法:与一个定值进行比较
使用步骤:
1)与第一种类似
2)把第一种中的第二步: 改为设置ValueToCompare属性
第三种用法:类型检查
1)设置通用步骤
2)设置Operator属性为:DataTypeCheck
3)设置Type:等检查的数据类型
RangeValidator:用于在某一个范围内的验证
1)通用步骤
2)MinimumValue
3)MaxmumValue
4)Type
RegularExpressionValidator:正则表达式验证
1)通用步骤
2)ValidationExpression设置正则表达式
CustomValidator:自定义验证控件
要求我们自己写客户端js代码进行验证,要求我们自己写服务器端的代码是行验证.
只是调用这些验证的方法由我们的程序自动调用了.
客户端的js脚本有两个参数,第一个为验证的控件,第二个为参数,设第二个为 args
//args.Value 获得被验证的值
//args.IsValid设置本验证控件是否验证通过
ErrorMessage: 是为汇总错误控件提供错误信息的
Text: 才是真正的显示在被验证控件旁的错误信息
汇总验证控件: ValidationSummary
ShowSummary: 以文本的形式显示错误信息
ShowMessageBox:以模式对话框的形式显示错误信息
所有提交的按钮都有一个属性叫:CausesValidation 这个属性指示该按钮是否触发验证控件
当需要点某个按钮,个别验证控件进行验证时,则需要设置按钮和验证控件的ValidationGroup
Js端:
var Page_IsValid = true; 页面上所有的验证控件,是否通过验证.默认为ture
Page_ClientValidate(null); 调用每一个验证控件的验证方法
每一个验证控件,都有一个isvalid属性,可以通过这个属性,来得到这一个验证控件是否通过验证.
E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 这里面有两个全局配置文件.machine.config web.config
1) 修改模中的有外键的实体类,让实体类做为属性
2) 数据库访问层:
a) Add方法
b) Update方法
c) GetModel方法
3) 业务逻辑层中:
a) DataTableToList
第二天:
导航控件:
1)SiteMapPath 面包屑导航 眉毛导航
需要一个 站点地图为其提供数据 (web.sitemap)
站点地图只能在网站根目录,并且名称只能是web.sitemap
站点地图其实就是一个xml文件,只不过站点地图对xml文件中的节点是有要求的:
A)根节点必须是siteMap节点
B)在根节点下有且只能有一个 siteMapNode 节点,这个节点代表我们网站的首页(主页) 这个节点有三个属性: url 指示首页地址 title: 文字显示 description: 鼠标放上去的提示文字
C)在B节点下面,就可以根据网页的层次关系来一层一层的套siteMapNode,每一个siteMapNode 节点表示一个网页
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),键,脚本,是否自动加<sacript>标签)
把脚本输出到 <form>表单内,我们自己的控件前面.
Page.ClientScript.RegisterStartupScript 和上面的方法作用一样,不同的是输出脚本的位置在我们的所有控件之后.所以要通过代码输出js对页面上的控件赋值,可以用这个方法.
第三天:
由于母板页和用户控件可以被其他任何目录中的普通页面使用,所以在写母板页和用户控件时,最好用绝对路径或应用路径来指明相关的文件路径.
ResolveClientUrl
ResolveUrl
Cookie:分为两种:
浏览器Cookie(临时Cookie): 存在浏览器的内存中,浏览器一关闭,就没有了.
持久Cookie:存在用户的磁盘上 (对Cookie设置一个过期时间这个Cookie就变成了持久Cookie写在磁盘上了)
自动登录的实现:
方法一:
在用户表中,再添加一个字段,akey,当用户选中记住我时,生成一个Guid,放入当前登录用户后对应的数据库表记录中,并把这个akey存入用户cookie.
当用户下次没登录访问时,我们可以从cookie中得到这个akey, 从数据库中查询得到这个akey对应的用户名和密码,自动把这个用户实体写入Sesssion["currUser]
好处:安全性比较好,因为客户端没有任何用户资料.
缺点:只能在一台电脑上实现记住我,不能让两台电脑同时记住我.
方法二:
我们就把用户名和密码写入到客户端.由于向客户端写资料了,所以我们要进行加密.
1)随机产生一个两位的字母 s
2)设用户的数据库中的密码为:p
3)向客户端存的密码为: s+Md5(s+md5(p))
把用户名和密码写入到客户端.
下次再登录时,只需要读出cookie中的用户名和密码,然后根据用户名从数据库中得到该用户名所对应的密码,然后把这个密码按照上面的算法加密.然后对比是否相同,如果相同,则这个cookie是我们写入的.让用户自动登录.
TreeView生成树:
1)写代码,通过对Nodes添加节点
2)通过站点地通添加节点
3)通过xml添加节点
数据源控件:负责读取数据,并把数据提供给数据绑定控件显示
数据绑定控件:得到数据,并显示出来
绑定数据有两种方法:
第一种:通过数据源绑定
1)只需要设置绑定控件的DataSourceId属性=数据源控件,并设置数据源控件能读取到数据就可以了.
第二种:手写代码绑定:
1)得到一个数据集合
2)把这个数据集合赋给数据源绑定控件的DataSource属性
3)执行DataBind()方法
什么情况下,控件的id在页面上会变:
1)非服务器端的控件id在页面上不会变.
2)服务器端控件,如果这个控件在母板中(母板页坑里面的控件)会变.
3)服务器端控件,在一些数据绑定控件模板(itemtemplete)中的会变.
4)所以,凡是在客户端访问服务器端控件时,使用<%=控件id.ClientID%>就不会出错了.
.. 当前页面所有的路径的上一级
http://www.cnblogs.com/ 当前页面所有的路径的上一级的上一级
~/ 网站应用的根目录
/ http://www.ccctv.com/abc/index.html
红色:叫域名
绿色:叫目录或虚拟目录
蓝色:叫文件名
/表示网站根目录,域名后就是网站根目录
~/表示应用目录 就是bin所在的文件夹.有可能是网站根目录,也有可能是虚拟目录,虚以目录可以做网站的应用目录
如果是虚拟目录: ~/和/的意义就不一样了
页大小为10
第一页: 1 10
第二页: 11 20
第三页: 21 30
第n页: (n-1)*10+1 n*10
一本图书的内容:
1)建页面
2)放一个DetailsView控件
3)新建一个数据源,配置这个数据源的Select方法,得到我们要的书
4)设置DetailsView控件的Fields属性,设置显示样式.
http://www.cctv.com/filefolder/filename.htm
/:在指定一个网址的时候,直接写/ 永远都是表示域名后的那个/ 即红色的/
\不以/开头,也不以~/,(直接写文件夹或文件名或以./ ../开头):这样叫相对路径,是以你这个代码所在的这个网页所有的目录开始定位
./ :和直接写文件名一样.代表当前目录.
左面两个路径是等价的
../ 也是相对路径定位: 当前目录所在的上一级目录
~/ 就是你网站所有的那个目录,注意:asp.net网站只能放在iis的网站目录,或虚拟目录
如果网站放在虚拟目录中:~/ 代表该虚拟目录的路径
如果放在网站根目录中: ~/代表网站根目录
一般网站水印的实现:
1)上传时就对图片加水印:
a) 每次用户访问时,直接给用户图片就行了.减小服务器端的压力.
b) 缺点:破坏了原有图片.如果网站换logo或改名
2)使用一般处理程序:
a) 每次用户请求都要进行水印的添加,增加了服务器端压力
b) 原图片被保存下来了.
要建立一个全局的一般处理程序步骤:
1)建一个类文件,继承自IHttpHandler接口并实现其方法,
2)在ProcessRequest方法中对用户请求的文件进行处理,如何知道用户请求的是哪一个文件呢? context.Request.PhysicalPath;
3)写好上述文件后,修改web.config 在 <httpHandlers>节点中添加下面一句话:
<add verb="*" path="/images/bookcovers/*.jpg" type="BookShop.Web.Common.wmCode" />
Verb表示请求方式 GET/POST 可以用*表示所有方式
Path 请求时,要转到全局一般处理程序的文件名 可以使用通配符
Type 把请求转给哪一个一般处理程序去处理,这里写类名.如果是WebSite,那么就写类名就行了.如果是Web应用程序,就写 命名空间.类名
实现上面3步,在测试环境下就可以了.如果要是放在iis上,还是不可以.
在网站上点右键->属性->主目录->配置
添加一个映射:
1)水印
2)防盗链
3)下载rar/txt文件时进行权限验证
Hosts文件的路径:
C:\Windows\system32\drivers\etc
支付流程:
AllowPaging:是否启用自动分页,注意.这个分页不是高效.
属性:Editindex: 指示当前哪一行处于编辑状态,如果都不处理编辑状态,则这个值为-1
属性:PageIndex:指示当前要显示哪一页
在GridView中,当我们点击一个按钮,这个按钮的CommandName=
Edit就会自动触发RowEditing 的编辑事件.
Cancel就会自动触发RowCancelingEdit的取消事件.
Update就会自动触发RowUpdating的更新事件
Delete就会自动触发 的删除事件RowDeleting
当切换页数时,会触发 PageIndexChanging事件
如果是手写代码进行绑定,上面的事件,需要我们创建并写代才能完成相应的功能.
当在GridView上翻页时,就会触发PageIndexChanging事件,在这个事件中修改PageIndex属性,PageIndex属性指示当前给用户显示哪一页.
如何获得GridView中的值:
1)如该列是 文本形式显示,那么:
GridView1.Rows[行的索引].Cells[列的索引].Text;
2)如果该列正处于编辑状态(当我们不知道这个控件的id的情况下),
((TextBox)GridView1.Rows[0].Cells[1].Controls[0]).Text
或
((CheckBox)GridView1.Rows[0].Cells[3].Controls[0]).Checked
3)如果要获得模板列中控件的内容,必须通过FindControl来得到该控件
一个普通列如果一旦隐藏,就无法获得其值了.如果还想获得,就必须添加一个模板列,在模板列中放一个Label或隐藏域,然后在后台才能获得.
当使用数据源控件进行绑定更新时,下列4个事件的触发顺序:
1)触发控件的RowUpdating事件: 通过e可能获得用户通过Bind绑定的数据更新前和更新后的值 e.NewValues和e.OldValues
2)数据源的Updating事件:这里可以通过e获得要更新的实体对象(在1)和2)事件事,可以对用户修改的数据进行再次更改和校验,如果发现数据不对,可以通过e.Cancel=true来取消更新.如果我们取消更新,那么业务逻辑层方法就不会被调用了)
3)调用在objectDataSource中指定的业务逻辑层的方法
4)数据源的Updated事件
5)控件的Updated事件
4)5)这两个事件可以对更新时发生的异常进行处理. 在调用业务逻辑层或数据访问层方法时(第3个事件)一旦发生异常,立即进入事件4)和5) 可以通过e.Exception是否为空得到在业务逻辑层或数据访问层是否引发异常,如果这个异已经被我们写代码处理,不想展示给用户,只需要设置e.ExceptionHandled=true就可以了.
如何使用第三方的自定义控件:
1)在工具栏上点右键,->选择项
2)
在.net组件中可以找已经注册的控件.如果没有注册,则可以通过浏览去查找.
要限控件所用到的表:
Sysfun 系统建档表,用于存储我们系统的程序基础资料
用户角色表:存储用户的角色,因为我们分配权限时是以角色为单位的.即我们是对角色分配权限的,而不是对单个用户分配的.
权限表:
当一个用户登录时,如何生成导航树????
1)先从用户表中得到用户的角色id,这样我们就能从角色表中得到角色资料(比如角色名称)
2)到权限中根据1中得到的角色id,能得到这个角色都能访问哪些程序的id
3)根据程序基本资料表生成树,在生成树的时候,检测如果该节点当前角色有权权限访问(依次生成基本资料表中的每一个节点时,当前这个节点的id在2)得到的能够访问的id集合中),y就显示这个节点.
每一个页面的验证:
1)先得到用户访问的页面路径 path
2)再根据当前用户的角色得到该角色所能够访问的权限集合 list
3)判断在2)中得到的能够访问的权限集合中有没有当前用户访问的这个路径,如果有,说明有权限访问本页,如果没有,说明没权限访问本页.
特殊情况:有的功能块是由一组页面组成的,我们不需要对每一个子节点设置权限.那么可以这么实现,功能块的主页文件名为: abc.aspx 下面所有子页的文件名必须由abc_XXXX.aspx来起名.当用户访问abc_xxxx.aspx时,发现文件名中有_,则检测当前用户是否有abc.aspx文件的权限就行了.
如何使用别人的WebServices??
1)首先你得有要调用Webservices的地址 endpoint 阅读相应文档,知道传入和返回的参数
2) 右击引用->添加服务引用
4)调用
全局配置文件的路径:
系统目录\Microsoft.NET\Framework\v2.0.50727\CONFIG
Machine.config 全局配置文件 控件我们这台机器上的所有网站
此目录下的 web.config 同上
我们的网站下还可以有web.config
我们网站的目录下还可以web.config
以你访问的这个页面为基准,就近原则
自定义错误
<customErrors mode="RemoteOnly" defaultRedirect="ErrorPage.htm">
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
浙公网安备 33010602011771号