词条统计
浏览次数:13739 次
编辑次数:1次 历史版本
最近更新:2013/6/20
创建者:掷鸡蛋者


新建一个Admin文件夹,然后将 ArticleController 移入其中,并在ArticleController.cs的命名空间后加上"Admin"

同时修改 MainController 代码:

为什么要增加命名空间呢?

因为对于一个实际中的项目,比如功能稍微复杂点的,controller数目往往很多。数百个领域对象,数百个controller,那是正常的现象。这时候您就会发现,将所有的控制器全部放在Controller根目录下,这种代码组织方式有些不方便:管理混乱,查找困难……等一系列问题都会出现。

因为 wojilu MVC 天然支持命名空间,所以您可以非常轻松的解决上述问题。

当然,命名空间还有一个更重要的好处,那就是可以非常方便的应用layout布局页面。

什么是布局文件?

在实际项目中,往往有多个页面在某些局部方面是相同的。比如每个页面都有一致的导航菜单。

wojilu MVC 把这种提供给多个方法共用的页面叫 layout(布局页),在ASP.NET中,它有个类似的名称,叫 MasterPage(母版页)。如果您有ASP.NET webform的开发经验,应该马上就明白了。

layout和控制器中的其他方法一样,也是由一个叫 Layout() 的方法和对应的 layout.html 视图构成。

我们在Controller/Admin 文件夹下添加一个控制器类 LayoutController

并增加对应的视图文件:

视图文件的html内容有两点要注意:

第一,引入了框架自带的css和js:

第二、确定其他内容插入到布局页面的位置:

任何 Controller/Admin 目录下的控制器,都将会使用这个LayoutController 的页面作为布局文件。
也就是说,这些控制器生成的内容,将会被框架自动插入到 #{layout_content} 处,然后再一起返回给客户端。

我们看下效果:

增加几行数据,然后稍微修改一下页面样式:

布局应用的原理:

1、MVC引擎首先查找当前action所属的controller的Layout内容,如果没有Layout内容,则跳过;
2、接着MVC引擎在controller所在命名空间中寻找一个叫 LayoutController 的控制器类,如果找到了,则应用其Layout的内容
3、再接着MVC引擎往上一级命名空间中寻找 LayoutController 类,如果找到了,应用其 Layout 内容
——因为MVC引擎是支持无限级命名空间的,所以MVC引擎会一只循环步骤3,只到到达根命名空间位置。

当然,如果某个controller不想应用上级的某个LayoutController的布局内容,您可以写代码隐藏:

这个 HideLayout方法可以多次调用,也就是说可以隐藏多个上级命名空间中的LayoutController的布局内容。
当然我们这里只是示例,实际不需要隐藏。