继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
- PageBase.cs——继承自MVC Controller
属性包含FormId、FormMode,作用见注释;同时还有对当前请求上下文HttpContext的处理,用以避免当前请求上下文为NULL的情况发生。
/// <summary>
/// 得到上下文HttpContext
/// 创建人:o527883184
/// 日期:2018-01-13 10:13
/// </summary>
protected new HttpContext HttpContext
{
get
{
if (_HttpContext == null)
{
HttpContextBase context = new HttpContextWrapper(HttpContext.Current);
_HttpContext = context.ApplicationInstance.Context;
}
return _HttpContext;
}
set
{
_HttpContext = value;
}
}
/// <summary>
/// HttpRequest
/// </summary>
protected new HttpRequest Request
{
get
{
return HttpContext.Request;
}
}
/// <summary>
/// HttpResponse
/// </summary>
protected new HttpResponse Response
{
get
{
return HttpContext.Response;
}
}
/// <summary>
/// HttpServerUtility
/// </summary>
protected new HttpServerUtility Server
{
get
{
return HttpContext.Server;
}
}
方法则包含了除图中所见外还有 GetQuery系类及GetForm系列,分别针对获取以URL方式传递的参数和以Form表单方式提交的数据,实质是对’Request.QueryString[key]’和‘HttpContext.Request.Form[key]’的封装以方便使用。
- CommonPageBase.cs——继承自PageBase
在CommonPageBase中,主要是针对程序运行流程提供的一些属性及方法。由图可见,分为五块。
1.页面属性相关:如页面编号(用于页面权限控制)、页面名称、网站类型、当前用户上下文(用于记录用户操作、检查用户权限等)等。
2.website->navgroup->navinfo->pageinfo->masterinfo:通过访问地址得到系统维护的网站信息,在网站信息中得到网站所用导航组,由导航组获取到导航组下的所有导航信息及该导航组下页面所使用的默认母版页。
3.公共方法:主要用于辅助其他四块及为FuncPageBase提供辅助方法。
4.跳转登录页面:当检查到用户未登录或登录失效且当前页面不允许匿名访问时跳转到登录页面。
5.跳转出错页面:当捕获到action抛出的异常,如继承自Exception的自定义异常或系统抛出的Exception异常,则跳转到指定的错误页面并抛出友好错误信息同时隐藏了原始错误信息,保障系统的安全。
在’跳转错误页面’中,通过覆写OnException方法来捕获action中的异常
/// <summary>
/// 页面错误处理事件
/// 创建人:o52788314
/// 日期:2018-01-28 12:48
/// </summary>
/// <param name="filterContext"></param>
protected override void OnException(ExceptionContext filterContext)
{
// 标记错误已处理
filterContext.ExceptionHandled = true;
// 跳转到出错页面
Exception ex = filterContext.Exception;
if (ex != null)
{
Server.ClearError();
this.RedirectErrorPage(ex);
return;
}
}
- FuncPageBase.cs——继承自CommonPageBase
FuncPageBase作为功能页面基类,主要提供一些通用功能,主要包含如图所示三方面:
1.权限验证:权限验证包括验证页面是否允许匿名访问、用户是否登录授权以及当前用户是否拥有当前操作权限。同时为了权限验证的灵活性提供虚属性(protected virtual bool IsCheckPermission IsCheckPermission 是否检验权限),各控制器可根据需要进行重写。
2.Action加载:Action加载相当于原page执行顺序,可根据自己的需要在不同阶段添加个人要执行的业务需求。在OnAuthentication方法中(在进行授权时调用)调用权限验证,验证成功则继续执行;在OnResultExecuting方法中(在执行由操作方法返回的操作结果前调用)获取UI交互信息。
3.UI交互:UI交互信息包含两部分,一部分为网站导航信息,一部分为视图交互信息,如当前用户名称、账号、角色、头像,当前网站及所用导航母版等。最后将两部分信息合为一个完整对象返回。对象类如下所示:
源码下载:多层基类
博客系统线上展示地址为http://blog.zheyk.cn/article_iwz1807003.html(博客地址)