美文网首页
MVC上下文设计

MVC上下文设计

作者: 凌雲木 | 来源:发表于2017-07-04 11:17 被阅读38次

MVC后台程序分几个阶段执行,例如验证,执行控制器方法等,在各个阶段我们可能需要重复使用同一信息,而我希望此信息只需获取一次,然后沿着mvc流程管道一直流动,这样在程序后面的阶段中就可以直接使用它,不用再重新获取了,以前用Session来实现,Session有很多弊端,不再叙说。

举例来说:在授权验证阶段,我们为对用户进行验证,从而获取了用户信息,当验证结束后,此用户信息并不被抛弃,而是保存下来,这样在后面的动作方法中我们就不需要再次获取用户信息,而是直接使用刚才在授权中保留下来的用户信息就可以了。

具体实现是这样的:

1首先定义前台上下文类和后台上下文类,以后台上下文为例

public  class AdminWorkContext

{

public bool IsHttpAjax;//当前请求是否为ajax请求

public string IP;//用户ip

public RegionInfo Region;//区域信息

public string Url;//当前url

public string UrlReferrer;//上一次访问的url

public string Sid;//用户sid

public int Uid = -1;//用户id

public string UserName;//用户名

public string UserEmail;//用户邮箱

public string UserMobile;//用户手机号

public string NickName;//用户昵称

public string Avatar;//用户头像

public string Password;//用户密码

public PartUserInfo PartUserInfo;//用户信息

public int UserRid = -1;//用户等级id

public UserRankInfo UserRank;//用户等级信息

public string UserRTitle;//用户等级标题

public int AdminGid = -1;//用户管理员组id

public AdminGroupInfo AdminGroup;//用户管理员组信息

public string AdminGTitle;//管理员组标题

public string Controller;//控制器

public string Action;//动作方法

public string PageKey;//页面标志

}

2创建基类控制器

public  class BaseController:Controller

{

///

/// 获得路由中的值

///

/// 键

/// 默认值

///

protected string GetRouteString(string key, string defaultValue)

{

object value = RouteData.Values[key];

if (value != null)

return value.ToString();

else

return defaultValue;

}

///

/// 获得路由中的值

///

/// 键

///

protected string GetRouteString(string key)

{

return GetRouteString(key, "");

}

}

3创建后台基类控制器

public   class BaseAdminController:BaseController

{

//工作上下文

public AdminWorkContext WorkContext = new AdminWorkContext();

//BLL.CustomerInfoBll bll = new BLL.CustomerInfoBll();

protected override void Initialize(RequestContext requestContext)

{

//Model.CustomerInfo custModel= bll.GetById(1);

//WorkContext.UserName = custModel.cName;

在此为WorkContext类赋值

base.Initialize(requestContext);

}

4  重定义mvc视图,以便在视图中可以使用上下文类。View中使用的比如HTML/AJAX/MODEL之类的东西,因为所有的页面都继承System.Web.Mvc.WebViewPage

4.1 创建后台视图基类

///

/// PC后台视图页面基类型

///

public abstract class AdminViewPage : System.Web.Mvc.WebViewPage

{

public AdminWorkContext WorkContext;

public sealed override void InitHelpers()

{

base.InitHelpers();

Html.EnableClientValidation(true);//启用客户端验证

Html.EnableUnobtrusiveJavaScript(true);//启用非侵入式脚本

BaseAdminController baseadminController = ((this.ViewContext.Controller) as BaseAdminController);

if (baseadminController != null)

{

WorkContext = baseadminController.WorkContext;

}

}

public sealed override void Write(object value)

{

Output.Write(value);

}

}

///

/// PC后台视图页面基类型

///

public abstract class AdminViewPage : AdminViewPage

{

}

4.2 自定义视图基类

每个view文件夹下的 web.confing,修改pageBaseType为自定义的视图基类FCJShop.Web.Services.ViewPages.AdminViewPage

5 最后就可以直接 调用了

创建一个控制器继承后台基类控制器,就可以使用上下文AdminWorkContext了

相关文章

  • MVC上下文设计

    MVC后台程序分几个阶段执行,例如验证,执行控制器方法等,在各个阶段我们可能需要重复使用同一信息,而我希望此信息只...

  • DCI 笔记

    DCI-数据上下文交互设计 data context interactive design 与MVC关系 就是把数...

  • 上下文配置(java config方式)

    spring mvc有两个上下文(ApplicationContext),分别为 bean的上下文和mvc 的上下...

  • springmvc踩坑记

    mvc配置文件,mvc-context.xml用来加载SpringMVC的上下文。今天遇到一个问题,Tomcat启...

  • 浅析 MVC

    一、 MVC 设计模式 1. 设计模式 设计模式,是通用代码(组织方式)的一种统称 2. MVC 是什么 MVC ...

  • iOS-面试题6-架构

    目录: MVC-Apple MVC-变种 MVP MVVM 分层设计 架构与设计模式的区别 一. MVC-Appl...

  • Springboot 2启动内置Tomcat源码分析

    以 Spring MVC 启动 Servlet 为例,其应用上下文为 ServletWebServerApplic...

  • iOS开发之MVVM+RAC架构模式

    在说MVVM之前,首先要了解我们最常用的MVC设计模式⬇️ 1.MVC设计模式 苹果官方将MVC设计模式作为iOS...

  • 游戏开发中的MVVM设计模式

    mvc设计模式 说到mvvm设计模式不得不先说说mvc设计模式。mvc其实不是一个模式,而是几个模式结合使用的结果...

  • MVC 框架学习 一

    MVC 运行逻辑 请求被UrlRoutingModule部件拦截 封装请求上下文HttpContext,成为Htt...

网友评论

      本文标题:MVC上下文设计

      本文链接:https://www.haomeiwen.com/subject/rpithxtx.html