MVC4.0 利用IActionFilter实现单一Action返回多种结果
延续MVC4.0 实现单一Action返回多种结果,我们实现了在一个Action中根据前台请求方式的不同和请求内容的不同返回了多个结果,但是这种返回多个结果的业务逻辑并不通用。如果现在年纪Action也要实现这样的业务逻辑,怎么办?除了复制代码,索性MVC为我们提供了完美的机制,在多个控制器上重用统一的业务逻辑规则:IActionFilter拦截器。
1.定义一个多响应Result拦截器MultipleResponseResultFilter
/// <summary>
/// 多响应Result拦截器
/// </summary>
public class MultipleResponseResultFilter : FilterAttribute, IActionFilter
{
public string PartialViewName { get; set; } /// <summary>
/// Action执行后
/// </summary>
void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext)
{
var request = filterContext.HttpContext.Request;
var viewResult = filterContext.Result as ViewResult; if (viewResult == null)
return; if (request.IsPartialRequest())
{
filterContext.Result = new PartialViewResult
{
TempData = viewResult.TempData,
ViewData = viewResult.ViewData,
ViewName = PartialViewName,
};
} if (request.IsJsonRequest())
{
filterContext.Result = new JsonResult
{
Data = viewResult.Model,
};
}
} /// <summary>
/// Action执行前
/// </summary>
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{ }
}
2.Action调用实现(局部视图PartialViewName为必须值)
[MultipleResponseResultFilter(PartialViewName="PartialStudent")]
public ActionResult Student()
{
return View(new { Name = "小明", Sex = "女" });
}
3.Html调用代码如下:
<body>
<h3>view视图</h3>
<div>我是小明</div> <h3>PartialView视图:</h3>
<div id="partial"></div> <h3>Json数据:</h3>
<div id="json"></div> <script src="~/Content/js/jquery-1.10.2.min.js"></script> <script type="text/javascript">
$(function () {
$('#partial').load('@Url.Action("Student", "Home", new { area=string.Empty, format="partial" })'); $.post('@Url.Action("Student", "Home")', { format: 'json' }, function (res) {
if (res) {
$('#json').html(res.Name);
}
}, 'json')
})
</script>
</body>
MVC4.0 利用IActionFilter实现单一Action返回多种结果的更多相关文章
- MVC4.0 利用IActionFilter实现简单的后台操作日志功能
首先我们要了解MVC提供了4种常用的拦截器:IActionFilter(Action拦截器接口).IExceptionFilter(异常拦截器接口).IResultFilter(Result拦截器接口 ...
- MVC4.0 实现单一Action返回多种结果
在开发过程中,我们往往会遇到这种情况.例如:展示学生的详细信息页面,加载学生的详细信息局部视图,异步请求学生的详细信息Json数据等等. 一般情况下,我们会写三个不同的action来支撑前台数据的调用 ...
- MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能
1.MVC4.0中HandleErrorAttribte已经帮我们处理了异常问题,当我们新建一个非空的MVC项目时候,在FilterConfig中会发现这样的代码 public class Filte ...
- .Net core 2.0 利用Attribute获取MVC Action来生成菜单
最近在学习.net core的同时将老师的MVC5项目中的模块搬过来用,其中有一块就是利用Attribute来生成菜单. 一·首先定义Action实体 /// <summary> /// ...
- ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中
我们在ASP.NET Core MVC项目中有如下HomeController: using Microsoft.AspNetCore.Mvc; namespace AspNetCoreActionF ...
- 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)
一.背景 在越来越重视用户体验的今天,换肤功能也慢慢被重视起来.一个web系统用户可以选择一个自己喜欢的系统主题,在用户眼里还是会多少加点分的.我们很开心的是easyui v1.3.4有自带defau ...
- asp.net mvc 3.0 知识点整理 ----- (2).Controller中几种Action返回类型对比
通过学习,我们可以发现,在Controller中提供了很多不同的Action返回类型.那么具体他们是有什么作用呢?它们的用法和区别是什么呢?通过资料书上的介绍和网上资料的查询,这里就来给大家列举和大致 ...
- Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML ...
- 【MVC】关于Action返回结果类型的事儿(上)
一. ASP.NET MVC 1.0 Result 几何? Action的返回值类型到底有几个?咱们来数数看. ASP.NET MVC 1.0 目前一共提供了以下十几种Action返回结果类型: 1. ...
随机推荐
- Java基础——IO流
今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...
- mongodb 文件,图片存储数据库
mongodb 文件,图片存储数据库
- WWF3的持续化<第五篇>
WWF提供的持续化功能会自动记录工作流实例以及它包含的所有活动的执行状态,这些状态并不是指工作流上流转的表单所呈现的业务逻辑状态.WWF持续化功能就是将未执行完成的工作流实例以及该实例中各种活动的状态 ...
- html5文本框提示文字属性为placeholder
html5文本框提示文字属性为placeholder 例子: <textarea id="comment" class="commentCont" n ...
- 八、Linux下的网络服务器模型
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器,按处理方式来分有循环服务器和并发服务器. 在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提 ...
- 阿里 Java面试 知识点
摘自: http://blog.csdn.net/wtyvhreal/article/details/45291835 =================================== 基础知识 ...
- 001Linux命令
1.删除非空目录的命令:rm -rf [目录名],r表示迭代,f表示强制: 删除空目录:rmdir [目录名]: 删除文件:rm [文件名]: 2.用户管里类命令: (1)添加用户:useradd [ ...
- ASP.NET内置对象一
ASP.NET提供了大量的对象类库,在这些类库中包含了许多封装好的内置对象,我们只需要直接使用这些对象的方法和属性,就能简单快速地完成很多的功能.Request对象.Response对象和Serve对 ...
- HTTP请求状态类
<?php /** * 常用常量文件 * */ /** * HTTP协议请求状态 */ class HttpRequest { //100类 ----用于指定客户端应相应的某些动作---- co ...
- MySQL 5.7.9 免安装配置
MySQL 5.7.9 免安装配置 环境:win10 64位 mysql版本:mysql-5.7.9-winx64.zip (http://dev.mysql.com/downloads/mysql/ ...