知识大全 Asp.net中基类页的设计和使用

Posted

篇首语:如果每个人都理解你,那你得普通成什么样!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Asp.net中基类页的设计和使用相关的知识,希望对你有一定的参考价值。

Asp.net中基类页的设计和使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在业务系统的开发过程中 为了保证页面风格的一致性以及减少重复代码的编写 我们需要引入基类页的概念 即 定义一个基类页 让所有 的页面都继承这个基类 并在该基类页中加入公用的属性和方法

  实际使用时 按照功能页面划分 可以定义多个基类页 如

  class FormBase

  class BizFormBase   FormBase

  class ViewFormBase  : BizFormBase

  class EditFormBase  : BizFormBase

  class QueryFormBase : FormBase

  FormBase 基类页中的根 提供与业务无关的服务 如 URL重写 日志等

  BizFormBase 加入和业务相关的属性 如 该 页面的当前业务对象ID等

  ViewFormBase EditFormBase 实现具体的查看 编辑功能

  QueryFormBase 实现对通用查询页面的封装

  从面向对象的角度看 基类页与普通的基类 继承类设计其实区别并不大 都要在基类中编写公用的属性方法 并通过虚函数 事件等方式让继承类重写或响 应 所不同的是基类页的设计过程受到所在环境的约束 在WinForm环境下 我们可以预先定义好窗体的公用元素 如工具条 默认的表格以及 DataSource控件等 而到了下的WebForm 则无法实现界面一级的继承 同时加入了状态管理等要求

  为了帮助大家理解 我们以查询基类页的设计过程来分析

  一个最简单的查询页面会包括三部分 多个查询条件文本框 查询按钮 以及表格 同时查询页会和一个数据访问组件关联 当点查询时 会把查询条件转成 where语句提交给数据访问组件

  QueryPeopleForm

  OnQueryButtonClick()

  

  string peopleName = txtPeopleName Text;

  string peopleAge  = txtPeopleAge Text;

  string sql;

  sql = string Format( Name Like % % and Age = PeopleName peopleAge);

  PeopleManager manager = new PeopleManager();

  this gridMain DataSource = manager GetDataTable(sql);

  this gridMain DataBind();

  

  当点击查询按钮时 我们做了以下三件事

   获取查询条件

   提交查询

   将查询结果绑定到表格

  这儿的提交查询和绑定在不同的查询页面都是一样的 于是我们首先把 放到基类页中 并提供这样一个方法 void QueryAndBind(IManager manager string sql);这儿要定义IManager接口 让所有的Manager都实现该接口 这样基类页就无需知道具体的Manager 只要调用 IManager GetDataTable方法 然后绑定表格到即可

  使用基类页后的代码

  QueryPeopleForm : QueryFormBase

  OnQueryButtonClick()

  

  string peopleName = txtPeopleName Text;

  string peopleAge = txtPeopleAge Text;

  sql = string Format( Name Like % % and Age = PeopleName peopleAge);

  QueryAndBind(new PeopleManager() sql);

  

  这儿的代码少了 但仍有问题 当查询条件变化后 每次拼查询语句的工作即枯燥又容易出错 那么我们加入一个Query类 以简化这儿的操作:

  public enum QueryOperator

  

  //等于比较

  Equal =

  // 不等于

  NotEqual =

  // Like比较

  Like =

  

  class Query

  

  void Add(string fieldName string value QueryOperator oper);

  string GetSql();

  

  QueryPeopleForm : QueryFormBase

  OnQueryButtonClick()

  

  Query query = new Query();

  query Add( Name txtPeopleName Text QueryOperator Like);

  query Add( Age txtPeopleAge Text QueryOperator Equal);

  QueryAndBind(new PeopleManager() query GetSql());

  

  把拼Sql的工作放在Query类中做 调用者只要声明查询字段 对应的值 和比较类型即可

  到这一步 我们的基类页已经很好用了 但还有一个小问题 也就是前面说的 在WebForm中无法实现界面级的继承 那么基类页的 QueryAndBind方法 将无法知道查询结果要绑定到哪一个表格 这时我们的做法是在基类页中声明DefaultGrid属性 让继承页来告知当前 的表格控件

  修改后的代码

  QueryPeopleForm : QueryFormBase

  OnQueryButtonClick()

  

  InitControls(gridMain);

  Query query = new Query();

  query Add( Name txtPeopleName Text QueryOperator Like);

  query Add( Age txtPeopleAge Text QueryOperator Equal);

  QueryAndBind(new PeopleManager() query GetSql());

  

  至此 基类页的功能已经完整了 但仍然不够 如果我们以后想改变查询按钮点击的行为 比如查询结果为空时 要弹出对话框提示 这时仍然要到处修改页 面代码 这不是我们所希望的 于是我们将QueryButton的OnClick操作也放在基类页了中执行 继承页只要初始化数据访问组件和设置查询条件 即可

  QueryPeopleForm : QueryFormBase

  void Initialize()

  

  // 指定页面对应的Manager

  Manager = new PeopleManager();

  // 绑定控件

  InitControls(gridMain btnQuery);

  

  void GetQueryInfo(Query query)

  

  //获得查询条件

  query Add( Name txtPeopleName Text QueryOperator Like);

  query Add( Age txtPeopleAge Text QueryOperator Equal);

  

  QueryFormBase:

  private IManager manager = null;

  public IManager Manager

  

  get return manager;

  set manager = value;

  

  void InitControls(GridView grid Button queryButton)

  

  this defaultGrid = grid;

  this queryButton = queryButton;

  queryButton Click += new EventHandler(QueryButton_Click);

  

  void QueryButton_Click(object sender EventArgs e)

  

  Query query = new Query();

  GetQueryInfo(Query);

  QueryAndBind(manager query GetSql());

  

  总的代码可以从附件中下载 大家可以加入断点 看看基类 继承类页的代码执行顺序

  应该说基类的设计相对复杂 但好处是继承页的代码变得清 楚了 没有多余重复的代码

  而基类页的设计其实是有技巧的 总结起来有以下几条

   首先以最直接的方式写出页面代码

   提取公用方法和添加辅助类

   提取事件处理流程到基类页中

   在基类页中设计需要继承页重载的方法与事件

cha138/Article/program/net/201311/12754

相关参考

知识大全 ASP.NET中基类页的设计和使用[2]

ASP.NET中基类页的设计和使用[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这儿的代

知识大全 ASP.NET中基类Page

ASP.NET中基类Page  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  加载对应Load事件

知识大全 ASP.NET返回上一页的方法小集

ASP.NET返回上一页的方法小集  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  返回上一页的这

知识大全 利用JS在asp.net中实现左导航页的隐藏

利用JS在asp.net中实现左导航页的隐藏  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 做个DataList 可分页的数据源

ASP.NET技巧:做个DataList可分页的数据源  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 Hibernate分页的设计和编码

Hibernate分页的设计和编码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当前页码的表单

知识大全 Asp.net组件设计浅论

Asp.net组件设计浅论  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一什么是组件?  查看

知识大全 ASP.NET设计控件净化网站语言

ASP.NET设计控件净化网站语言  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一概述  考虑

知识大全 ASP.NET创建Web服务之设计方针

ASP.NET创建Web服务之设计方针  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用ASP

知识大全 ASP.NET组件设计之传输机制浅析

ASP.NET组件设计之传输机制浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET