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

简介:     我很懒,很不喜欢写重复的代码,一行重复的都不想写,所以当同一段代码要写第二遍的时候,我就会去想避免的方法。OO的特性之一 —— 继承 —— 可以帮很大的忙。     这里只说UI部分,先看一个类的图。

    我很懒,很不喜欢写重复的代码,一行重复的都不想写,所以当同一段代码要写第二遍的时候,我就会去想避免的方法。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 
    有了列表页面的基类,对应的也要有表单页面的基类,对!这个就是。在这里要定义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 了。

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


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

    下面是代码

    
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


        
    }





相关文章
|
2月前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
80 4
|
2月前
|
开发框架 JavaScript 前端开发
提升生产力:8个.NET开源且功能强大的快速开发框架
提升生产力:8个.NET开源且功能强大的快速开发框架
|
2月前
|
Unix Linux C#
增强用户体验:2个功能强大的.NET控制台应用帮助库
增强用户体验:2个功能强大的.NET控制台应用帮助库
|
2月前
|
设计模式 前端开发 数据可视化
LiveCharts2:简单灵活交互式且功能强大的.NET图表库
LiveCharts2:简单灵活交互式且功能强大的.NET图表库
46 0
|
4月前
|
存储 编解码 算法
C#.NET逃逸时间算法生成分形图像的毕业设计完成!晒晒功能
该文介绍了一个使用C#.NET Visual Studio 2008开发的程序,包含错误修复的Julia、Mandelbrot和优化过的Newton三种算法,生成色彩丰富的分形图像。作者改进了原始算法的效率,将内层循环的画点操作移至外部,提升性能。程序提供五种图形模式,支持放大缩小及颜色更新,并允许用户自定义画布大小以调整精度。还具备保存为高质JPG的功能。附有四张示例图片展示生成的分形效果。
|
3月前
|
C# 开发者 Windows
4款.NET开源、功能强大的Windows桌面工具箱
4款.NET开源、功能强大的Windows桌面工具箱
|
3月前
|
C# C++
一款.NET开源、功能强大、跨平台的绘图库 - OxyPlot
一款.NET开源、功能强大、跨平台的绘图库 - OxyPlot
|
3月前
|
人工智能 C#
Jvedio:.NET开源功能强大的本地视频管理神器
Jvedio:.NET开源功能强大的本地视频管理神器
122 0
|
3月前
|
搜索推荐 C# Windows
一款.NET开源、免费、实用的多功能原神工具箱(改善桌面端玩家的游戏体验)
一款.NET开源、免费、实用的多功能原神工具箱(改善桌面端玩家的游戏体验)
|
4月前
|
C#
【实用干货】推荐两款开源且功能强大.NET反编译神器
【实用干货】推荐两款开源且功能强大.NET反编译神器