`
黄继华
  • 浏览: 43033 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

可以通过基类实现的几种功能。vs2008 .net 2.0

 
阅读更多

这里只说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
有了列表页面的基类,对应的也要有表单页面的基类,对!这个就是。在这里要定义DataIDKindDataID是记录从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 了。

当然这里只是举一个例子,并不是说前台验证就一定要用这种方法,抛砖引玉吧。


基类都准备好了,下面就可以作业面了,根据不同的情况,继承不同的基类,如果基类不够的话,还可以根据情况来决定是否需要在增加。

下面是代码

publicclassBasePagePower:System.Web.UI.Page
{
/**////<summary>
///在基类里面定义数据访问的实例,一个用户,一次访问,只使用一个实例
///</summary>

publicDataAccessHelpdal=newDataAccessHelp();

/**////<summary>
///记录登陆人员的信息,您可以换成其他的方式来保存
///</summary>

publicstring[]EmpInfo;

初始化在Page_Load之间执行#region初始化在Page_Load之间执行
protectedoverridevoidOnInit(EventArgse)
{
base.OnInit(e);

//验证是否已经登陆

//如果已经登陆了,加载登陆人员的信息,
//这里使用数组,您也可以使用其他的您习惯的方式。
EmpInfo=newstring[6];
EmpInfo[
0]="";
//加载代码略

//清除IE缓存
Response.Cache.SetNoStore();
}

#endregion


销毁数据访问层的实例。#region销毁数据访问层的实例。
overrideprotectedvoidOnUnload(EventArgse)
{
if(dal!=null)
dal.Dispose();

base.OnUnload(e);
}

#endregion


}


publicclassBasePage:BasePagePower
{
/**////<summary>
///接收URL传递过来的模块ID,大部分页面都需要使用这个ID
///</summary>

publicstringFunctionID="";

/**////<summary>
///部门ID。不是所有的情况都会传递
///</summary>

publicstringDepartmentID="-3";

初始化在Page_Load之间执行#region初始化在Page_Load之间执行
protectedoverridevoidOnInit(EventArgse)
{
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验证权限实现的代码
publicvoidCheckPower()
{
//判断是否有权限访问该网页,验证方法略
}

#endregion


}

publicclassBasePageList:BasePage
{
//相关的操作
}

publicclassBasePageForm:BasePage
{
/**////<summary>
///接收URL传递过来的记录ID,用于显示、修改数据
///</summary>

publicstringDataID;

/**////<summary>
///接收URL传递过来的操作方式。
///1:添加、2:修改、3:显示数据
///</summary>

publicstringKind;

publicButtonBtn_Save;//保存按钮
publicButtonBtn_Save2;

初始化在Page_Load之间执行#region初始化在Page_Load之间执行
overrideprotectedvoidOnInit(EventArgse)
{
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","returnmyCheck()");
Btn_Save.Text
="基类里面设置Btn_Save";

if(Btn_Save2!=null)
Btn_Save2.Text
="基类里面设置Btn_Save2";

}

#endregion



}





0
0
0
(请您对文章做出评价)
分享到:
评论

相关推荐

    asp.net知识库

    ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题转换 ASP.NET2.0 ObjectDataSource的使用详解(1) ASP.NET...

    MVC2.0入门必读教程程序源码

    安装完ASP.NET MVC后,在VS里新建一个项目,可以看到有一个“ASP.NET MVC Web Application”的选项,选择它,新建一个项目,并命名为“MVCDemo”。 建完项目后,可以看到默认情况下已经建立了很多文件夹,这里简略...

    Asp.net实现多语言Demo.rar

    我实现多语言是利用了ASP.NET2.0的资源文件,其实据我所知除了资源文件的方式,在数据库里面建多个表中进行一个区域文化映射,也是解决国际化的一种方式(关于这种方式感兴趣的朋友可以自己试试) 现在我把实现国际化...

    国际化语言

    我实现多语言是利用了ASP.NET2.0的资源文件,其实据我所知除了资源文件的方式,在数据库里面建多个表中进行一个区域文化映射,也是解决国际化的一种方式(关于这种方式感兴趣的朋友可以自己试试) 现在我把实现国际化用到...

    亮剑.NET深入体验与实战精要2

    8.2.1 安装ASP.NET 2.0 Ajax Extensions 333 8.2.2 创建ASP.NET Ajax应用程序 333 8.2.3 ScriptManager控件使用技巧 335 8.2.4 UpdaetPanel控件使用技巧 336 8.2.5 AsyncPostBackTrigger实现 外部控件引发局部刷新...

    亮剑.NET深入体验与实战精要3

    8.2.1 安装ASP.NET 2.0 Ajax Extensions 333 8.2.2 创建ASP.NET Ajax应用程序 333 8.2.3 ScriptManager控件使用技巧 335 8.2.4 UpdaetPanel控件使用技巧 336 8.2.5 AsyncPostBackTrigger实现 外部控件引发局部刷新...

    c# 自然框架源码 框架源码

     还可以实现权限设置、导出数据、个性化设置等功能。 元数据和中间件 常用函数库、数据访问函数库、自定义控件、在线用户、页面基类模块、角色管理模块组成。还有几个第三方控件,比如My97日期控件、FCKEditor等 ...

    asp.net面试题

    1.new有几种用法 第一种:new Class(); 第二种:覆盖方法 public new XXXX(){} 第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。 2.如何把一个array复制到arrayList里 foreach( ...

    【。net 专业】 面试题

    类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的...

    Microsoft SQL Server 2005 Express Edition SP3

    您可以从此 Microsoft 网站下载 .NET Framework 2.0。 注意: .NET Framework 2.0 由 Microsoft Visual Studio 2005 和所有版本的 SQL Server 2005 自动安装。 [顶部] 2.2 SQL Server Express SQL Server ...

Global site tag (gtag.js) - Google Analytics