自制MVC框架基础插件介绍
本文介绍的基础插件不是实现BeforehandCommonAttribute或ProceedPlugin的postsharp插件,这些都是自定义的基础性的拦截,而且在项目中经常用到。
1). CompiledAttribute
设置在方法名上,用来说明程序在处理完MVC模式后再去驱动WebForm工作,两者工作模式结合进来。
控制器代码:
namespace Jobmate.Controllers
{
public class Default
{
[Compiled]
public virtual IDictionary Compiled1(IDictionary context)
{
context.Add("x", "b");
return context;
}
}
}
Compiled1.aspx页面代码:
页面端:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Compiled1.aspx.cs" Inherits="integration_class_Compiled1" %> <%="aaa"%>
页面后端调用:
public partial class integration_class_Compiled1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//控制端会传过来一个hashtable,在页面端如果要使用,通过以下手端可使用
IDictionary context = (IDictionary)HttpContext.Current.Items["context"];
Response.Write(context["x"]);
}
}
2). DynamicAttribute
设置在类名上,表示该类是需要被动态拦截的,就是通过aspectsharp拦截。
控制器代码:
namespace Jobmate.Controllers
{
[Dynamic]
public class Default
{
/// <summary>
/// 写特性方式实现
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
[IP(AspectPriority = )]
public virtual IDictionary Dynamic1(IDictionary context) //必须是虚方法,否则没法拦截
{
context.Add("x", "b");
return context;
}
}
}
Web.config配置:
<configuration>
…
<!--AOP切面,实例化对像时需使用Stephen.Core.Proxy代理声明得到新实例,动态代理,advice放后面的先执行-->
<aspectsharp>
<configuration>
aspect processor1 for [Jobmate.Controllers]
pointcut method(* Dynamic1(*))
advice(ShareInterceptor)
end
end
</configuration>
</aspectsharp>
…
</configuration>
拦截器ShareInterceptor代码:
namespace Jobmate.Controllers.Interceptor
{
[Serializable]
public class ShareInterceptor : AspectInterceptor
{
public override void Proceed(IDictionary myContext)
{
myContext.Add("aaa", "xxx");
}
}
}
Dynamic1.aspx只输入了$aaa
运行以后页面输出是:xxx
3). HasSessionAttribute
设置在方法名上,表示该方法具有会话功能,默认方法是没有会话功能的。
控制器代码:
namespace Jobmate.Controllers
{
[Dynamic]
public class Default
{
/// <summary>
/// 通过ValidateKey验证码的方式
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
[Insert(AspectPriority = 2, Key = "Jobmate.Users", StatementID = "UserOpt", ValidateKey = "ValidateNO")]
[LongID(AspectPriority = 1)]
[FormData(AspectPriority = 0)]
[HasSession]
public virtual object Create3Action(IDictionary context)
{
long s = Convert.ToInt64(context[InsertAttribute.ValueKey]);
string st;
if (s > 0)
st = "操作成功!";
else
if (s == -404)
st = "验证码不正确!";
else
st = "操作失败!";
HttpContext.Current.Response.Write("<script>alert('" + st + "');document.location.href='HashSession1.aspx'</script>");
HttpContext.Current.Response.End();
return s;
}
}
}
4). OutputCacheAttribute
设置在方法名上,缓存页面拼接的字串,下次打开页面直接拿缓存字串,而不用处理相关操作了。
|
属性名 |
作用 |
默认值 |
选项说明 |
其它说明 |
|
Duration |
过期时间(秒) |
30 |
可选 |
|
|
VaryByParam |
缓存参数,用分逗号隔开,页面只要参数没有变化,就输出缓存中的内容(区分大小写)。 |
空值 |
可选 |
控制器代码:
namespace Jobmate.Controllers
{
[Dynamic]
public class Default
{
/// <summary>
/// 缓存100秒,这时你再更新数据库数据的话他也不会变了
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
[OutputCache(Duration = 100)]
[Get(Key = "Jobmate.Users.UserOpt")]
public virtual IDictionary OutputCache1(IDictionary context)
{
return context;
}
}
}
5).直接通过WebForm页面
新建的webform只要不在控制层对应相应的方法就会执行webform原来的调用。
以上方式可以demo中体验。
demo下载:
http://files.cnblogs.com/netcorner/%E5%9F%BA%E7%A1%80%E6%8F%92%E4%BB%B6%E6%BC%94%E7%A4%BA.rar
自制MVC框架基础插件介绍的更多相关文章
- 自制MVC框架的插件与拦截器基础
上篇谈到我自己写的MVC框架,接下来讲讲插件及拦截器! 在处理一些通用的逻辑最好把它封装一个插件或者拦截器,以便日后可以直接拿过来直接使用.在我的框架中可以通过继承以下抽象类来实现插件或者拦截器. 1 ...
- MVC框架的插件与拦截器基础
自制MVC框架的插件与拦截器基础 上篇谈到我自己写的MVC框架,接下来讲讲插件及拦截器! 在处理一些通用的逻辑最好把它封装一个插件或者拦截器,以便日后可以直接拿过来直接使用.在我的框架中可以通过继承以 ...
- .Net MVC 框架基础知识
一.什么是MVC? MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式. MVC全名是Model View Controlle ...
- 自制MVC框架CRUD操作、列表、分页显示插件介绍
这里涉及到的操作都是引用自Stephen.DALService数据层.数据访问层实现方式在后文中我会仔细的说明,先说明一下数据操作集成的插件. 1).InsertAttribute 用于插入记录. 状 ...
- ABP VNext框架基础知识介绍(1)--框架基础类继承关系
在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...
- ABP VNext框架基础知识介绍(2)--微服务的网关
ABP VNext框架如果不考虑在微服务上的应用,也就是开发单体应用解决方案,虽然也是模块化开发,但其集成使用的难度会降低一个层级,不过ABP VNext和ABP框架一样,基础内容都会设计很多内容,如 ...
- 一起写框架-MVC框架-基础功能-Date类型数据绑定(七)
实现功能 表单请求传递的数据,格式为以下格式的日期时间数据. (1):yyyy-MM-dd hh:mm:ss (2):yyyy-MM-dd 执行方法可以使用Date类型接收. 实现思路 1.获得表单字 ...
- Spring MVC 实验3 springMVC框架基础
实验三:spring mvc框架基础 实验目的: (1)理解spring mvc框架的运行流程 . (2)掌握springmvc框架的配置 实验要求: 请根据课程内容, 修改项目中的任意一用例,将控 ...
- Portlet MVC框架
Portlet MVC框架 16.1. 介绍 Spring不仅支持传统(基于Servlet)的Web开发,也支持JSR-168 Portlet开发. Portlet MVC框架尽可能多地采用Web ...
随机推荐
- CSS3新增属性2
阴影 box-shadow:水平偏移 垂直偏移; 偏移可以负值 box-shadow:水平偏移 垂直偏移 颜色; box-shadow:水平偏移 垂直偏移 模糊值 颜色; /*最常见的*/ box-s ...
- 解决maven无法下载jar的问题
先去本地仓库查看是否有没有jar包,如果没有并且存在除jar包以外的文件,先将文件删除,重新用maven下载一遍.如果还是不行,就自己下载jar包导入到本地仓库,但是不能手动的添加文件夹和pom.xm ...
- 1.1(JavaScript学习笔记)、JavaScript基础
一.JavaScript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型. 它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端 ...
- 2.1(java编程思想笔记)位移操作
java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...
- cookie和localStorage、sessionStorage的区别
先来讲讲localStorage吧,我最初接触localStorage,是听一个同学说他在做项目的过程中用到过这个.但是我自己也用到过的,就是在学习React的时候,在做一个小demo,这个demo简 ...
- (转)DLL中导出函数的两种方式(dllexport与.def文件)
DLL中导出函数的两种方式(dllexport与.def文件)http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792 ...
- ArcGIS 10.2 三维分析工具箱部分工具不能用
如在以下面的方式操作时发现弹出错误提示, “ Unable to execute the selected tool”... 问题解决方法为: 点击Extensions...,然后把下图中的选项全部勾 ...
- Http和Https网络同步请求httpclient和异步请求async-http-client
原文:https://blog.csdn.net/fengshizty/article/details/53100694 Http和https网络请求 主要总结一下使用到的网络请求框架,一种是同步网络 ...
- BOOM -- 智能合约编程
译注:原文首发于ConsenSys开发者博客,原作者为Eva以及ConsenSys的开发团队.如果您想要获取更多及时信息,可以访问ConsenSys首页点击左下角Newsletter订阅邮件.本文的翻 ...
- Ceph源码解析:Scrub故障检测
转载请注明出处 陈小跑 http://www.cnblogs.com/chenxianpao/p/5878159.html 本文只梳理了大致流程,细节部分还没搞的太懂,有时间再看,再补充,有错误请指正 ...