public override void Process(ProcessContext context) { MvcEventPublisher.Instance.BeginAddLayout(context.ctx); if (context.ctx.utils.isSkipCurrentProcessor()) { return; } MvcContext ctx = context.ctx; ControllerBase controller = context.getController(); if (controller.utils.isHided(controller.GetType())) { return; } int intNoLayout = ctx.utils.getNoLayout(); IList paths = ctx.utils.getLayoutPath(); if (intNoLayout >= paths.Count + 1) { return; } String actionContent = context.getContent(); //检查缓存 CacheInfo ci = CacheInfo.InitLayout(ctx); Object cacheContent = ci.CheckCache(); if (cacheContent != null) { logger.Info("load from layoutCache=" + ci.CacheKey); context.setContent(HtmlCombiner.combinePage(cacheContent.ToString(), actionContent)); return; } String layoutContent = ControllerRunner.RunLayout(ctx); // 加入缓存 if (ci.IsActionCache) { ci.AddContentToCache(layoutContent); } if (ctx.utils.isEnd()) { context.endMsgByText(layoutContent); } else { context.setContent(HtmlCombiner.combinePage(layoutContent, actionContent)); } }
// 0) path => Blog.Admin // 1) path => Blog // 2) path => "" private static String addLayoutPrivate(String path, String actionContent, MvcContext ctx, Boolean isLastLayout) { // String content = layoutCacher.getByPath( path ) // if( strUtil.HasText( content ) ) return HtmlCombiner.combinePage( content, actionContent ); ControllerBase controller = ControllerFactory.FindLayoutController(path, ctx); if (controller == null) { return(actionContent); } ctx.controller.utils.addHidedLayouts(controller); // 将controller中提到需要隐藏的控制器隐藏 if (ctx.controller.utils.isHided(controller.GetType())) { return(actionContent); } // 检查缓存 CacheInfo ci = CacheInfo.InitLayout(ctx, controller); Object cacheContent = ci.CheckCache(); if (cacheContent != null) { logger.Info("load from nsLayoutCache=" + ci.CacheKey); return(HtmlCombiner.combinePage(cacheContent.ToString(), actionContent)); } controller.utils.switchViewToLayout(); ActionRunner.runLayoutAction(ctx, controller, controller.Layout); if (ctx.utils.isEnd()) { return(controller.utils.getActionResult()); } String actionResult = controller.utils.getActionResult(); if (ci.IsActionCache) { ci.AddContentToCache(actionResult); } return(HtmlCombiner.combinePage(actionResult, actionContent)); }
public override void Process(ProcessContext context) { MvcEventPublisher.Instance.BeginProcessAction(context.ctx); if (context.ctx.utils.isSkipCurrentProcessor()) { return; } MvcContext ctx = context.ctx; ControllerBase controller = context.getController(); // 检查缓存 CacheInfo ci = CacheInfo.Init(ctx); Object cacheContent = ci.CheckCache(); if (cacheContent != null) { logger.Info("load from actionCache=" + ci.CacheKey); context.setContent(cacheContent.ToString()); getPageMetaFromCache(ctx, ci.CacheKey); return; } MethodInfo actionMethod = ctx.ActionMethodInfo; // context.getActionMethod(); // 设值模板并载入全局变量 setControllerView(controller, actionMethod); // 运行并处理post值 ActionRunner.runAction(ctx, controller, actionMethod, controller.utils.runAction); String actionContent = controller.utils.getActionResult(); // 加入缓存 if (ci.IsActionCache) { ci.AddContentToCache(actionContent); // 加入PageMeta addPageMetaToCache(ctx, ci.CacheKey); } actionContent = PostValueProcessor.ProcessPostValue(actionContent, ctx); if (ctx.utils.isAjax) { context.showEnd(actionContent); } else if (ctx.utils.isFrame()) { int intNoLayout = ctx.utils.getNoLayout(); if (intNoLayout == 0) { String content = MvcUtil.getFrameContent(actionContent); context.showEnd(content); } else { context.setContent(actionContent); } } else if (ctx.utils.isEnd()) { context.showEnd(actionContent); } else { context.setContent(actionContent); } updateActionCache(ctx); MvcEventPublisher.Instance.EndProcessAction(context.ctx); }