MVC4.0 利用IActionFilter实现单一Action返回多种结果
2015-10-24 11:57
417 查看
延续MVC4.0 实现单一Action返回多种结果,我们实现了在一个Action中根据前台请求方式的不同和请求内容的不同返回了多个结果,但是这种返回多个结果的业务逻辑并不通用。如果现在年纪Action也要实现这样的业务逻辑,怎么办?除了复制代码,索性MVC为我们提供了完美的机制,在多个控制器上重用统一的业务逻辑规则:IActionFilter拦截器。
1.定义一个多响应Result拦截器MultipleResponseResultFilter
2.Action调用实现(局部视图PartialViewName为必须值)
3.Html调用代码如下:
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>
相关文章推荐
- 九度OJ 1133:学分绩点 (加权平均数)
- 文章标题
- PHP7新特性整理介绍篇
- Android编程ViewPager回弹效果实例分析
- 二维数组搜素--进军硅谷
- KNN(k-NearestNeighbor)识别minist数据集
- 系统利益相关者描述
- android 数据保存之存到本地
- input_event_compat
- 不同屏幕适配图片
- 九度OJ 1132:与7无关的数 (数字特性)
- Python时间戳和日期的相互转换
- 九度OJ 1132:与7无关的数 (数字特性)
- Camera Calibration 相机标定:原理简介(五)
- implement-queue-by-two-stacks
- Camera Calibration 相机标定:原理简介(五)
- 看图说话:你不了解的OA与SAP集成
- 如何设置多个同一页的tinymce编辑
- 无聊到周六的教研室
- zTree的操作。封装好