人无信不立/2008-04-26 22:30

MonoRail学习笔记十二:layout布局的使用

在Asp.net中提供了MasterPage母版页的机制,可以实行整体风格的控制
在MonoRail中同样提供了这种机制,可以方便的处理布局和一些整体风格。

使用方式很简单,主要就是Layout属性:
LayoutController.cs
1    [Layout("/master")]
2    public class LayoutController : Controller
3    {
4        public void Index()
5        {
6            //LayoutName = "/master2";
7
8        }

9    }
表示这个Controller里面所有的vm都是使用/master的布局设置。其中第六行注释放开之后可以动态更换一个布局

/views/master.vm
<html>
<body>
$!head 
<br/>
Welcome!
<p>$childContent</p>
$!footer

</body>
</html>
指定了三个区域,就相当于三个Asp.net中的内容一样,其中$childContent是固定名称的

/views/layout/index.vm
#capturefor(head)
    11111
#end
Inner Content
#capturefor(footer)
    22222
#end
最后显示的结果就是两个vm结合后的页面显示

如果熟悉Asp.net中的母版页的话应该很好理解的
posted @ 2007-11-01 11:23 永春 阅读(788) 评论(15)  编辑 收藏 所属分类: MonoRail

  回复  引用  查看    
#1楼 2007-11-01 12:25 | kiler      
问个问题,为什么$!head和$!footer有感叹号
$childContent没有?
  回复  引用  查看    
#2楼 [楼主]2007-11-01 13:31 | GSpring      
@kiler
$childContent相当于MonoRail中定义的全局变量,是关键字
$!head和$!footer是自己定义的,名称可以自己起

我这边是按照常用的方式来写的
当然你可以都加 "!" 或者都不加 "!" 都是可以的
  回复  引用    
#3楼 2007-11-01 22:53 | 陆俊杰2 [未注册用户]
我会遇到这种错误~,知道告诉我下~谢谢
Encountered "#end" at line 3, column 1.
Was expecting one of:
<EOF>
"(" ...
<RPAREN> ...
<ESCAPE_DIRECTIVE> ...
<SET_DIRECTIVE> ...
"\\\\" ...
"\\" ...
<TEXT> ...
<SINGLE_LINE_COMMENT> ...
"*#" ...
"*#" ...
<STRING_LITERAL> ...
"if" ...
"stop" ...
<NUMBER_LITERAL> ...
<WORD> ...
<IDENTIFIER> ...
<DOT> ...
"{" ...
"}" ...

  回复  引用  查看    
#4楼 [楼主]2007-11-02 09:00 | GSpring      
@陆俊杰2
没碰到,最好能把你的代码贴一下
好像是#end 使用的有问题
  回复  引用    
#5楼 2007-11-02 12:39 | 陆俊杰2 [未注册用户]
view:
#CaptureFor(head)
aa
#end

master:
<html>
<body>
$!head <br/>
Welcome!
<p>$childContent</p>
$!footer

</body>
</html>
  回复  引用  查看    
#6楼 [楼主]2007-11-02 13:53 | GSpring      
@陆俊杰2
应该是capturefor 小写
  回复  引用    
#7楼 2007-11-02 14:24 | 陆俊杰2 [未注册用户]
受教了~
  回复  引用  查看    
#8楼 2007-11-05 16:54 | 老刘.      
问下 GSpring ,
layout 仿佛没有 后台对应的 .cs文件,
如果想在 layout 中做服务器端处理,比如用户登录,或者在线用户显示之类的,应该怎么做呢?
还请兄台赐教:)
  回复  引用  查看    
#9楼 [楼主]2007-11-05 17:52 | GSpring      
@老刘.
这还真是个问题,
目前我想到的是可以利用AJaxHelper来实现
在master中调用:
$AjaxHelper.GetJavascriptFunctions()
<div id="user">
</div>
<script language=javascript>
new Ajax.Updater('user', '/myajax/User.rails', {});
</script>

具体使用可以参看我的:MonoRail学习笔记十六:AJax在MonoRail中的使用
  回复  引用  查看    
#10楼 2007-11-06 17:25 | 老刘.      
@GSpring
: )
试验了下,关于提交,直接提交到xx controller 的 xx action就ok了,关于更新里边的html标记,现行解决方案还是javascript。

  回复  引用    
#11楼 2007-12-20 11:47 | p [未注册用户]
老刘说的是个问题,我现在也困在这里,layout里怎么做登陆呢
  回复  引用  查看    
#12楼 [楼主]2007-12-20 12:28 | GSpring      
@p
目前我想到的是可以利用AJaxHelper来实现

  回复  引用  查看    
#13楼 2008-05-30 10:55 | bluesky521      
我使用了layout母版页机制感觉不错,不过有一个问题:
在asp.net中,使用母版页的页面可以设置自己的title(网页标题),layout如何实现这样的功能呢?
我使用了layout,这样每个页面的标题都与母版页的标题一样,对于搜索引擎的索引这样不太友好呀!如何实现自定义的title呢?请赐教,先谢了.
  回复  引用  查看    
#14楼 2008-07-03 16:52 | beyond923      
PropertyBag["title"]
Controller 里面赋值

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: