文章出處
文章列表
延續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>
文章列表
全站熱搜