我记录综合系统学习研究之用户管理二(wojilu.Web.Controller.Users MainController)
书接上回
我们看回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">)分别是找朋友和推荐用户
纵观Layout.html的代码可以看到,通过左浮动将界面整体分成了2列,右边的列是
而左边的列则根据不同的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)。
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);
}
}
}
这段代码的含义是什么,且听下回分解。