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

书接上回

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

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

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

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

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

<div style="float:left; padding:20px 5px 20px 0px; 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)。

-------------------------------------------------------------------
以我们现在所处的位置来分析以MainController的Index action为例,即
首先 当前action所属的controller的Layout有内容---MainController的Layout方法。
执行完之后,wojilu框架在controller所在命名空间中寻找一个叫 LayoutController 的控制器类,即在Users文件夹下寻找LayoutController.cs,没有找到,继续向上一层寻找,找到了最外层(wojilu.Web.Controller)的控制器类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);
}

}
}

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

原文地址:https://www.cnblogs.com/xchsp/p/2858378.html