书接上回

我们看回MainController对应的视图目录

我记录综合系统学习研究之用户管理二(wojilu.Web.Controller.Users MainController)

可以看出我们上回只讨论了Index.html,还有7个视图文件没有讨论过。

这次来分析这其中我认为最重要的一个Layout.html

Layout.html中有一段代码如下:

<div style="width:100%;margin:0px;padding:0px;font-size:14px;">

<div style="float:left; padding:20px 5px 20px 0px; width:690px;">
#{layout_content}
</div>

其实我们上节分析的index.html最终将替换此处的#{layout_content}

欲知代码奥秘的同学可以参看LayoutProcessor的Process方法的最后一句话

context.setContent( HtmlCombiner.combinePage( layoutContent, actionContent ) );

Layout.html中后面还有2个div块(<div class="sectionPanel userPanel">)分别是找朋友和推荐用户

我记录综合系统学习研究之用户管理二(wojilu.Web.Controller.Users MainController)

纵观Layout.html的代码可以看到,通过左浮动将界面整体分成了2列,右边的列是

我记录综合系统学习研究之用户管理二(wojilu.Web.Controller.Users MainController)

而左边的列则根据不同的action触发,使用#{layout_content}替换。

Layout.html的末尾使用了<div style="clear:both"></div>来清除浮动,以使得其他的div块(比如页脚部分)不在继续浮动到页面的左侧。

Layout方法的代码如下:

public override void Layout() {

set( "SearchAction", to( Search ) );

bindSimple();

List<User> picked = userService.GetPickedList( 20 );
bindUsers( picked, "picked" );
}

没什么可说的,无非是对layout.html视图中变量的绑定。有了上节的基础,这里的代码不难看懂。

这里分享一个wojilu框架里重要的流程,以下是wojilu作者的描述

-------------------------------------------------------------------

 

1、MVC引擎首先查找当前action所属的controller的Layout内容,如果没有Layout内容,则跳过;

//1的代码奥秘在此(LayoutProcessor 的Process方法)。

2、接着MVC引擎在controller所在命名空间中寻找一个叫 LayoutController 的控制器类,如果找到了,则应用其Layout的内容

3、再接着MVC引擎往上一级命名空间中寻找 LayoutController 类,如果找到了,应用其 Layout 内容 

//2,3的代码奥秘在此(NsLayoutProcessor 的Process方法中的addLayoutPrivate)。

-------------------------------------------------------------------
以我们现在所处的位置来分析以MainController的Index action为例,即
首先 当前action所属的controller的Layout有内容---MainController的Layout方法。
执行完之后,wojilu框架LayoutController 
 

namespace wojilu.Web.Controller {

public class LayoutController : ControllerBase {

[CacheAction( typeof( SiteLayoutCache ) )]
public override void Layout() {


if (ctx.owner.obj is Site) {

if (ctx.route.isAdmin || ctx.route.isUserDataAdmin) {
run( new SiteLayoutController().AdminLayout );
}
else
run( new SiteLayoutController().Layout );
}
else if (ctx.owner.obj is User)
{

if (ctx.route.isAdmin)
run(new SpaceLayoutController().AdminLayout);
else
run(new SpaceLayoutController().Layout);

}
else if (ctx.owner.obj is Group)
{

if (ctx.route.isAdmin)
run(new GroupLayoutController().AdminLayout);
else
{
run(new GroupLayoutController().Layout);
}

}
}

 这段代码的含义是什么,且听下回分解。

相关文章:

  • 2021-08-29
  • 2021-06-09
  • 2021-05-31
  • 2021-07-27
  • 2022-02-10
  • 2021-07-22
  • 2021-10-23
  • 2021-08-22
猜你喜欢
  • 2022-03-04
  • 2021-06-21
  • 2021-07-18
  • 2022-01-27
  • 2022-01-04
  • 2021-06-11
  • 2021-08-17
相关资源
相似解决方案