金色海洋工作室
asp.net经验之谈、数据库等相关技术
博客园
::
首页
:: ::
联系
::
订阅
::
管理
posts - 201, comments - 3529, trackbacks - 73
公告
我的QQ:513281121。
MSN:jyk0011@live.cn
<
2008年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
最新评论
我的标签
留言簿
给我留言
查看留言
我参加的小组
Web技术联盟
设计模式
女程序员之家
写书译书小组
LumaQQ.NET
博客园精华集出版小组
沈阳.NET俱乐部
你必须知道的.NET
道不远人
我参与的团队
沈阳.NET俱乐部(0/0)
Visual Basic 团队(0/0)
东北.NET俱乐部(0/0)
我的标签
分页控件
(9)
数据访问
(7)
ado.net
(7)
分页
(6)
自定义控件
(5)
分页算法
(3)
asp.net
(3)
myPage
(3)
表单控件
(2)
权限设计
(2)
更多
随笔分类
(213)
《必须知道的.net》读后感(8)
asp.net的使用技巧(11)
个人理财小助手(4)
基础知识(4)
面向过程与面向对象(15)
数据访问 ado.net1.0 (14)
数据访问 ado.net2.0(7)
通用权限(18)
心情驿站(43)
转载专区(5)
资源下载(3)
自定义控件(5)
自定义控件—表单控件(17)
自定义控件—分页控件(31)
自然架构(28)
随笔档案
(187)
2009年7月 (2)
2009年6月 (23)
2009年5月 (17)
2009年4月 (4)
2009年3月 (1)
2009年2月 (1)
2009年1月 (9)
2008年10月 (4)
2008年9月 (15)
2008年8月 (14)
2008年7月 (22)
2008年6月 (8)
2008年5月 (8)
2008年4月 (9)
2008年3月 (2)
2008年2月 (7)
2008年1月 (7)
2007年12月 (2)
2007年11月 (2)
2007年10月 (1)
2007年9月 (3)
2007年8月 (3)
2007年7月 (3)
2007年5月 (3)
2007年4月 (7)
2007年3月 (4)
2007年2月 (3)
2006年8月 (3)
最新随笔
1. 【自然框架】之“元数据”的威力
2. 【自然框架】之通用权限的Demo(二):添加人员、添加账户、添加角色里面的账户以及列表的权限验证
3. 【自然框架】之“解耦”初探
4. 使用接口来统一控件的取值、赋值和初始化
5. 【自然框架】表单控件 之 一个表单修改多个表里的记录
6. 【自然框架】之 “表单控件”与“实体类”
7. 【自然框架】之鼠标点功能现(二):表单控件的“应用”—— 代码?只写需要的!
8. 【自然框架】之鼠标点功能现(一):单表的增删改查(即上次5月23日活动的一个主题)【Demo、源码下载】
9. 主流想法、我的想法,和自我检讨
10. 弱弱问一下,这两个图,是不是传说中的ER图呀?
11. 【自然框架】之通用权限的Demo(一):角色的添加和修改
12. 辩论赛 VS 讨论组
13. 【自然框架】之通用权限(九):权限的验证
14. 【自然框架】之通用权限(八):权限到字段(列表、表单、查询)
15. 【自然框架】之通用权限(七):权限到按钮
积分与排名
积分 - 539686
排名 - 50
最新评论
1. Re:【自然框架】之“元数据”的威力
[quote]Kain:vs的强项是可以不用手写任何代码,拖一拖,拉一拉就可以搞定了。但是真正的项目里面有几个个人用到了?SqlDataSource不就是个鸡肋么?[/quote] vs真是个可怜的工...
--winter-cn
2. re: 【自然框架】之“元数据”的威力
这么多年了,该出来了,哈哈。
神州不就把笔记本市场给搅和了一下吗,然后笔记本就都降价了。
--金色海洋(jyk)
3. re: 【自然框架】之“元数据”的威力
这东西几年前就有,只是知道的人都不拿出来,拍的是影响市场发展,发展过快.
而且MS自己也不喜欢别人做它自己的生意.
就说到这里吧
--JacksonLin
4. re: 通用权限相关文档的下载【2009.7.2更新】
呵呵 不错!
--coolxlc
5. re: 【自然框架】之“元数据”的威力
"生成模板的界面" 这个是什么意思呢?
--金色海洋(jyk)
6. re: 【自然框架】之“元数据”的威力
你这个东东,看来是我想要的,再参考一下ror和django,你提出了自然,我的想法差不多,我希望注重开发过程中的"流畅"对开发人员友好,比如在用ror或是django生成模板的界面...
--lexus
7. re: 【自然框架】之通用权限的Demo(二):添加人员、添加账户、添加角色里面的账户以及列表的权限验证
@HOH
感谢您的理解!
--金色海洋(jyk)
8. re: 【自然框架】之“元数据”的威力
--引用-------------------------------------------------- 陈海飞: 实体类可以不用代码生成器提前生成。 你可以根据数据库的元数据去动态执行代码生成实...
--金色海洋(jyk)
9. re: 【自然框架】之通用权限的Demo(二):添加人员、添加账户、添加角色里面的账户以及列表的权限验证
你说话不这么尖酸刻薄会死人啊,每个人都有自己的工作,有自己的私人事情,别人没有义务要按时或者说及时放出DEMO。
--HOH
10. re: 【自然框架】之“元数据”的威力
实体类可以不用代码生成器提前生成。
你可以根据数据库的元数据去动态执行代码生成实体类。
--陈海飞
11. re: 【自然框架】之“元数据”的威力
你没有仔细看我的代码吧,呵呵。
如果我的和 SqlDataSource 一样,我还费这个尽干什么呢?
--金色海洋(jyk)
12. re: 【自然框架】之“元数据”的威力
貌似很多人问过图怎么画的
呵呵,office2007的一些功能还是很多人不知道哦
--徐少侠
13. re: 【自然框架】之“元数据”的威力
vs的强项是可以不用手写任何代码,拖一拖,拉一拉就可以搞定了。但是真正的项目里面有几个个人用到了?SqlDataSource不就是个鸡肋么?
--Kain
14. re: 【自然框架】之“元数据”的威力
其实带不带权限,只是一个查询条件的问题,加上查询条件,就是权限过滤了。
--金色海洋(jyk)
15. re: 【自然框架】之“元数据”的威力
楼主补的这张图,和我想的还是不大一样。
我觉得应当是,权限控制菜单,菜单控制所有后面的东西。
因为我们可以依据权限,动态地建立菜单。
--hxmhj
阅读排行榜
1. 三层架构之我见 —— 不同于您见过的三层架构。(11041)
2. 通用权限的思路。带有数据库关系图(7093)
3. “数据访问函数库”(DataAccessLibrary for .net2.0 )源代码下载 09.06.15更新(6515)
4. 我自己写的一个分页控件(源码和演示代码)PostBack分页版 for vs2003、SQL Server(6374)
5. ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI。(6174)
6. QuickPager asp.net 分页控件、表单控件等自定义控件下载 和介绍 【2009.07.02更新】(5574)
7. 设计上的8/2原则,您实现了吗?实现后会是什么样子的呢?(5460)
8. 我的网站的后台管理的结构图。(5150)
9. 我能为公司做点什么呢?(4798)
10. 【思路】超级传送带——我的程序思路(4575)
评论排行榜
1. 【自然框架】表单控件 之 一个表单修改多个表里的记录(116)
2. 通用权限的思路。带有数据库关系图(89)
3. 三层架构之我见 —— 不同于您见过的三层架构。(89)
4. 【自然框架】之通用权限(六):权限到节点(79)
5. 利用虚拟硬盘(把内存当作硬盘)来提高数据库的效率(目前只针对SQL Server 2000)可以提高很多(68)
6. 【自然框架】之鼠标点功能现(一):单表的增删改查(即上次5月23日活动的一个主题)【Demo、源码下载】(66)
7. 您把哪些东东看成了对象?(66)
8. 【自然框架】之通用权限(七):权限到按钮 (64)
9. 【抛砖引玉】“技术顾问” —— 老程序员的一个出路。(55)
10. 其实添加数据也可以这样简单——表单的第一步抽象(针对数据访问层)《怪怪设计论: 抽象无处不在 》有感(55)
可以通过基类实现的几种功能。vs2008 .net 2.0
我很懒,很不喜欢写重复的代码,一行重复的都不想写,所以当同一段代码要写第二遍的时候,我就会去想避免的方法。OO的特性之一 —— 继承 —— 可以帮很大的忙。
这里只说UI部分,先看一个类的图。(我也不知道应该叫做什么图)
(TestList 、TestForm是网页.aspx ,上面的都是类 .cs )
一般的软件(比如OA、CRM等)都是需要先登录,需要有一定的权限才能够访问,那么每个页面都需要验证一下是否已经登陆了,或者登录是否超时,以及是否有访问页面的权限,在具特点就是有没有添加、修改、删除,有没有编辑某一条记录的权限,这些操作都是可以放在基类里面的。
BasePagePower
(.cs文件) 继承
System.Web.UI.Page
验证是否登录、登录是否超时,加载登陆人员的信息(ID,姓名,部门等),生成
数据访问函数库
的实例,然后在OnUnload事件里销毁实例。这样其他页面只要继承了这个类,就不用去想如何验证登录信息,如何获取登录人的姓名这一类的事情了。至于数据访问函数库的实例嘛,估计这个会有很大的争议,在这里实例化的目的是,一个人、访问一次页面,只生成一个实例。这样可以提高这个实例的利用率,因为我感觉数据访问函数库的“体积”有点大,生成一回,如果只做了一件事情(执行一个函数),那是不是太可惜了呢。另外在基类里面实例化以后,在继承的页面里调用的时候就和使用静态函数很像了,也不用考虑什么时候销毁对象,因为这个也在基类里面实现了。
BasePage
(.cs文件) 继承
BasePagePower
在这里主要是处理
URL传递过来的模块ID,验证一下这个参数是否正确(是不是数字),不是的话作出处理。还可以处理其它的参数,比如部门ID等,这个根据大家的情况灵活设置吧。在我的项目里,大部分页面都需要使用这个ID,可以用这个参数做很多的事情,比如验证是否有访问该页面的权限,加载控件的属性等。
BasePageList
(.cs文件) 继承BasePage
您可能会问了,有了上面的两个类就已经够用了,为什么还有哇,上面那两个也是应该合在一起的呀?因为我会在列表页面使用几个自己写的控件:分页控件、查询控件、显示数据的控件,对于这几个控件的属性设置可以放在这个基类里面来处理,这样表单页面就可以简单不少。
BasePageForm
(.cs文件) 继承 BasePage
有了列表页面的基类,对应的也要有表单页面的基类,对!这个就是。在这里要定义
DataID
和
Kind
。
DataID
是记录从URL传递过来的记录ID ,主要用来修改数据和显示数据用;而
Kind也是从URL传递过来的,表示要添加、修改还是显示数据。当然在这里不仅要接收,同时也要验证一下参数是否正确,以避免注入攻击。
控件的继承
。表单嘛,都会有一个“保存”按钮吧,如果想要在提交数据之前,先在IE里做一下验证的,我的做法是给按钮加一个js的onclick 事件,而这个操作就很烦,每一个表单都要加一遍。现在可以在表单的基类里面定义一个按钮,然后在
OnInit
事件里加上这个js 事件就可以了。
public class BasePageForm : BasePage
{
public Button Btn_Save; //保存按钮
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
Btn_Save.Attributes.Add("onclick", "return myCheck()");
Btn_Save.Text = "基类里面设置Btn_Save";
}
}
这样就可以了,表单页面继承之后,拖拽一个按钮,ID设置成 Btn_Save 就 ok 了。
当然这里只是举一个例子,并不是说前台验证就一定要用这种方法,抛砖引玉吧。
基类都准备好了,下面就可以作业面了,根据不同的情况,继承不同的基类,如果基类不够的话,还可以根据情况来决定是否需要在增加。
下面是代码
public
class
BasePagePower : System.Web.UI.Page
{
/**/
///
<summary>
///
在基类里面定义数据访问的实例,一个用户,一次访问,只使用一个实例
///
</summary>
public
DataAccessHelp dal
=
new
DataAccessHelp();
/**/
///
<summary>
///
记录登陆人员的信息,您可以换成其他的方式来保存
///
</summary>
public
string
[] EmpInfo;
初始化 在Page_Load之间执行
#region
初始化 在Page_Load之间执行
protected
override
void
OnInit(EventArgs e)
{
base
.OnInit(e);
//
验证是否已经登陆
//
如果已经登陆了,加载登陆人员的信息,
//
这里使用数组,您也可以使用其他的您习惯的方式。
EmpInfo
=
new
string
[
6
];
EmpInfo[
0
]
=
""
;
//
加载代码略
//
清除IE缓存
Response.Cache.SetNoStore();
}
#endregion
销毁数据访问层的实例 。
#region
销毁数据访问层的实例 。
override
protected
void
OnUnload(EventArgs e)
{
if
(dal
!=
null
)
dal.Dispose();
base
.OnUnload(e);
}
#endregion
}
public
class
BasePage : BasePagePower
{
/**/
///
<summary>
///
接收URL传递过来的模块ID,大部分页面都需要使用这个ID
///
</summary>
public
string
FunctionID
=
""
;
/**/
///
<summary>
///
部门ID。不是所有的情况都会传递
///
</summary>
public
string
DepartmentID
=
"
-3
"
;
初始化 在Page_Load之间执行
#region
初始化 在Page_Load之间执行
protected
override
void
OnInit(EventArgs e)
{
base
.OnInit(e);
this
.FunctionID
=
Request.QueryString[
"
fid
"
];
验证模块参数是否是数字。
#region
验证模块参数是否是数字。
if
(
!
Functions.IsInt(
this
.FunctionID))
{
Response.Write(
"
模块参数不正确!
"
);
Response.End();
}
#endregion
DepartmentID
=
Request.QueryString[
"
did
"
];
if
(
!
Functions.IsInt(DepartmentID))
{
//
没有传递,设置默认值
DepartmentID
=
"
-3
"
;
}
//
验证是否有权限访问该网页
CheckPower();
}
#endregion
验证权限 实现的代码
#region
验证权限 实现的代码
public
void
CheckPower()
{
//
判断是否有权限访问该网页,验证方法略
}
#endregion
}
public
class
BasePageList : BasePage
{
//
相关的操作
}
public
class
BasePageForm : BasePage
{
/**/
///
<summary>
///
接收URL传递过来的记录ID,用于显示、修改数据
///
</summary>
public
string
DataID;
/**/
///
<summary>
///
接收URL传递过来的操作方式。
///
1:添加、2:修改、3:显示数据
///
</summary>
public
string
Kind;
public
Button Btn_Save;
//
保存按钮
public
Button Btn_Save2;
初始化 在Page_Load之间执行
#region
初始化 在Page_Load之间执行
override
protected
void
OnInit(EventArgs e)
{
base
.OnInit(e);
this
.DataID
=
Request.QueryString[
"
id
"
];
//
接收记录ID
this
.Kind
=
Request.QueryString[
"
k
"
];
//
接收操作方式
验证模块参数是否是数字。
#region
验证模块参数是否是数字。
if
(
!
Functions.IsInt(
this
.DataID))
{
Response.Write(
"
记录ID不正确!
"
);
Response.End();
}
#endregion
Btn_Save.Attributes.Add(
"
onclick
"
,
"
return myCheck()
"
);
Btn_Save.Text
=
"
基类里面设置Btn_Save
"
;
if
(Btn_Save2
!=
null
)
Btn_Save2.Text
=
"
基类里面设置Btn_Save2
"
;
}
#endregion
}
Tag标签:
基类
,
权限验证
,
控件继承
posted on 2008-06-17 21:29
金色海洋(jyk)
阅读(2799)
评论(14)
编辑
收藏
网摘
所属分类:
数据访问 ado.net2.0
Feedback
1230406
#1楼
2008-06-17 21:48 |
willieQ
不错。。。。学习~~~~
回复
引用
查看
#2楼
[
楼主
]
2008-06-17 21:52 |
金色海洋(jyk)
补一下 下载地址
http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html
" target="_new">
http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html
vs2008确实铤强大,画的图也挺漂亮的,对于控件的继承支持的也挺好。不象vs2003那么“笨”。
回复
引用
查看
#3楼
2008-06-18 08:42 |
pwqzc[未注册用户]
老兄
你越来越NB了啊
祝福你啊
回复
引用
#4楼
2008-06-18 10:14 |
个性天空[未注册用户]
继承 貌似是.NET的好处之一罢了
回复
引用
#5楼
2008-06-18 10:22 |
红尘中迷茫
public class BasePagePower : System.Web.UI.Page
{
/**//// <summary>
/// 在基类里面定义数据访问的实例,一个用户,一次访问,只使用一个实例
/// </summary>
public DataAccessHelp dal = new DataAccessHelp();
/**//// <summary>
/// 记录登陆人员的信息,您可以换成其他的方式来保存
/// </summary>
public string[] EmpInfo;
初始化 在Page_Load之间执行#region 初始化 在Page_Load之间执行
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
//验证是否已经登陆
//如果已经登陆了,加载登陆人员的信息,
//这里使用数组,您也可以使用其他的您习惯的方式。
EmpInfo = new string[6];
EmpInfo[0] = "" ;
//加载代码略
//清除IE缓存
Response.Cache.SetNoStore();
}
#endregion
销毁数据访问层的实例 。#region 销毁数据访问层的实例 。
override protected void OnUnload(EventArgs e)
{
if (dal != null)
dal.Dispose();
base.OnUnload(e);
}
#endregion
}
---------------------------------
public DataAccessHelp dal = new DataAccessHelp();
用完后不能自动销毁吗?为何要单写一个OnUnload
回复
引用
查看
#6楼
[
楼主
]
2008-06-18 11:14 |
金色海洋(jyk)
@pwqzc
谢谢
@个性天空 [未注册用户]
其他的也有继承吧。
@红尘中迷茫
关于销毁的我也 没有弄太清楚,不知道那些 可以自动销毁,那些需要 手动销毁,先写一个预留 ,如果不用的话,改一下基类就可以了,其他的页面也不用修改。所以更要写在基类里面了。
回复
引用
查看
#7楼
2008-06-18 11:18 |
UD_Miser[未注册用户]
我也想知道5楼朋友提出的问题 忘解答 谢谢
回复
引用
#8楼
[
楼主
]
2008-06-18 13:02 |
金色海洋(jyk)
我感觉一个实例应该有一个销毁的事件吧,但是具体要怎么销毁我也不是太清楚。
回复
引用
查看
#9楼
2008-06-18 15:01 |
UD_Miser[未注册用户]
--引用--------------------------------------------------
金色海洋(jyk): 我感觉一个实例应该有一个销毁的事件吧,但是具体要怎么销毁我也不是太清楚。
--------------------------------------------------------
我记得我的头头也说 最好在不用一个实例的时候 把它指向NULL
回复
引用
#10楼
[
楼主
]
2008-06-18 16:38 |
金色海洋(jyk)
那就在 Unload里面 指向 null就可以了 ,谢谢提醒。
回复
引用
查看
#11楼
2008-06-18 16:46 |
sujiantao
有点多了吧,有两个类就够了,有些不算太通用的也搞起来有隐患。
回复
引用
查看
#12楼
[
楼主
]
2008-06-18 18:05 |
金色海洋(jyk)
@sujiantao
至于够不够通用,要看大家的写项目的习惯,在我看来确实有很多是通用的,所以我设置了这些基类,如果您没有这么多的通用的话,那么就只用两个或者一个就可以了。
依口味添加。:)
回复
引用
查看
#13楼
2008-06-19 13:01 |
beyoung
public class BasePagePower : System.Web.UI.Page
{
/**//// <summary>
/// 在基类里面定义数据访问的实例,一个用户,一次访问,只使用一个实例
/// </summary>
public DataAccessHelp dal = new DataAccessHelp();
-----------------------------------------------------------
定义成static
不用每次都创建对象.
很多人用一个不是更好吗?
有什么付作用?
回复
引用
查看
#14楼
[
楼主
]
2008-06-19 15:04 |
金色海洋(jyk)
对静态函数不是很了解,不敢用。
在另一个地方用了一下,总是出现莫名其妙的问题,出现了还不好修改,所以就不敢用了。
再有就是“设置”麻烦。
实例化的函数,可以把 数据类型、连接字符串,做成属性,方便使用。
还可以对存储过程的参数进行封装,方便调用。
还可以方便的使用事务。
利用基类也可以达到一个人一次访问的过程只使用一个实例。
另外静态版的可以看这里,前一段时间写的,没有在实际项目中使用
http://www.cnblogs.com/jyk/archive/2007/04/29/sqlhelp.html
" target="_new">
http://www.cnblogs.com/jyk/archive/2007/04/29/sqlhelp.html
回复
引用
查看
刷新评论列表
刷新页面
返回页首
发表评论
昵称:
[登录]
[注册]
主页:
邮箱:
(仅博主可见)
验证码:
看不清,换一个
评论内容:
登录
注册
[使用Ctrl+Enter键快速提交评论]
0
1224257
链接:
切换模板
导航:
网站首页
社区
新闻
博问
闪存
网摘
招聘
找找看
Google搜索
China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务
相关文章:
最新IT新闻:
竞争日趋激烈 微软欲借 Windows 7 扭转战局
上海电信计划2012年80%用户实现100M带宽
数万名网友签名抗议星际争霸2取消局域网功能
Silverlight打造杰克逊纪念专题
传诺基亚正在开发Android手机
相关链接: