`
raisun_1988
  • 浏览: 117899 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

MonoRail学习笔记十九:可重复使用组件ViewComponents的使用

    博客分类:
  • Java
阅读更多

 

在MonoRail中我们可以定义一些可重用的组件,在其他需要使用的页面引入这个组件就可以了。有点相当于.NET中的自定义控件,可以节约代码,方便开发,提高重用性。

在MonoRail中把这一功能叫做ViewComponent,下面就来具体看看它的使用方法:
ViewComponent可以使用现成的view,可以给父view发送数据,也支持参数输入和内部多节的方式

1、生成ViewComponent类:
要生成自己的ViewComponet必须从抽象类ViewComponent继承,继承后有三个方法可以被覆盖:
Initialize:初始化,可以在这个方法中接收传递的参数
Render:渲染实际的显示内容
SupportsSection:指定这个组件可以支持哪些子节点

最简单的一个ViewComponent:
usingCastle.MonoRail.Framework;

publicclassHeaderComponent:ViewComponent
{
}
当使用这个组件时会直接渲染views下的components/headercomponent/default.vm文件
当然和Controller一样,我们也可以指定一个渲染的vm文件:
usingCastle.MonoRail.Framework;

publicclassHeaderComponent:ViewComponent
{
publicoverridevoidRender()
{
RenderView(
"otherview");
}

}
这样的话就会使用views下的components/headercomponent/otherview.vm文件

2、使用ViewComponent组件
生成组件之后,接下来就要看看如何使用它。主要的使用方式有两种:普通方式和嵌套内容的方式,使用时都是直接把类名作为组件名称来使用的
a、普通方式:
#component(HeaderComponent)
使用component关键字来使用
b、嵌套内容的方式:
C#代码:
publicclassBlockViewComponent2:ViewComponent
{
publicBlockViewComponent2()
{
}


publicoverridevoidRender()
{
Context.ContextVars[
"it"]="GSpring";
Context.RenderBody();
}

}
vm代码:
#blockcomponent(BlockViewComponent2)
innercontent$it
#end
调用之后,显示在页面上的内容就是:
innercontentGSpring
嵌套方式主要就是使用关键字:blockcomponent
Context.RenderBody()方法是用来渲染内容的,可以同时调用多次,那么所包含的内容就会显示多次

3、使用参数
正如.NET的自定义控件一样,MonoRail中的自定义控件也可以从外部接收一些参数,比如显示的颜色、大小、其他参数等。
使用ComponentParams属性在Initialize方法中来接收:
usingCastle.MonoRail.Framework;

publicclassTableComponent:ViewComponent
{
privateICollectionelements;

privateobjectborder;
privatestringstyle;
privateobjectcellpadding;
privateobjectcellspacing;

publicoverridevoidInitialize()
{
elements
=(ICollection)ComponentParams["elements"];

border
=ComponentParams["border"];
style
=(String)ComponentParams["style"];
cellpadding
=ComponentParams["cellpadding"];
cellspacing
=ComponentParams["cellspacing"];

base.Initialize();
}

调用的时候,就可以写成这样:
#blockcomponent(TableComponentwith"elements=$items""border=0""style=border:1pxsolidblack;""cellpadding=0""cellspacing=2")

#end
或:
#component(TableComponentwith"elements=$items""border=0""style=border:1pxsolidblack;""cellpadding=0""cellspacing=2")

4、嵌套子节点的使用
在ViewComponet中还可以定义多个子节点,在一些复杂的情况下比较方便,看下面的一个实例:
Contoller代码:
publicvoidDefault()
{
ArrayListitems
=newArrayList();

items.Add(
"项目1");
items.Add(
"项目2");
items.Add(
"项目3");

PropertyBag.Add(
"items",items);
}
ViewCompoent代码:
publicclassTableComponent:ViewComponent
{
privateICollectionelements;

privateobjectborder;
privatestringstyle;
privateobjectcellpadding;
privateobjectcellspacing;

publicoverridevoidInitialize()
{
elements
=(ICollection)ComponentParams["elements"];

border
=ComponentParams["border"];
style
=(String)ComponentParams["style"];
cellpadding
=ComponentParams["cellpadding"];
cellspacing
=ComponentParams["cellspacing"];

base.Initialize();
}


publicoverridevoidRender()
{
RenderText(
String.Format(
"<tableborder=\"{0}\"style=\"{1}\"cellpadding=\"{2}\"cellspacing=\"{3}\">",
border,style,cellpadding,cellspacing));

if(Context.HasSection("colheaders"))
{
Context.RenderSection(
"colheaders");
}


if(elements!=null)
{
intindex=0;

foreach(objectiteminelements)
{
PropertyBag[
"index"]=++index;
PropertyBag[
"item"]=item;

if(Context.HasSection("altitem")&&index%2!=0)
{
Context.RenderSection(
"altitem");
}

else
{
Context.RenderSection(
"item");
}

}

}


RenderText(
"</table>");
}


publicoverrideboolSupportsSection(stringname)
{
returnname=="colheaders"||name=="item"||name=="altitem";
}


}
vm代码:
#blockcomponent(TableComponentwith"elements=$items")
#colheaders
<tr>
<th>&nbsp;</th>
<th>Element</th>
</tr>
#end

#item
<tr>
<td>$index</td>
<td>$item</td>
</tr>
#end

#altitem
<tr>
<tdstyle="background-color:Red">$index</td>
<tdstyle="background-color:Red">$item</td>
</tr>
#end
#end

显示的效果,如下图所示:

欢迎加入:http://www.itpob.cn/bbs

分享到:
评论

相关推荐

    monorail::monorail:单轨电车| 网络设计系统

    :monorail: 单轨| 网络设计系统Monorail for React帮助开发人员执行。 这些组件由SimSpace的工程师和UX设计师的核心团队开发,可实现可靠的开发工作流程,以构建美观且功能强大的Web项目。快速开始将Monorail添加到...

    MonoRail基础学习文档和实例

    本资源包含“MonoRail基础学习文档”和“实例”,旨在帮助初学者快速入门并深入理解MonoRail的使用。 首先,让我们详细了解 MonoRail 的核心概念: 1. **Controller**:在MonoRail中,Controller是处理用户请求的...

    MonoRail例子(入门篇)

    MonoRail是 Castle Project 的一部分,它是一个开源的、基于.NET框架的Web应用程序开发框架,设计用于替代ASP.NET Web Forms,提供了更面向对象的MVC(Model-View-Controller)架构。MVC模式鼓励分离关注点,使代码...

    学习资料monorail

    Castle Monorail是MVC(Model-View-Controller)设计模式的一个实现,它提供了灵活的架构,允许开发者构建可扩展、易于测试和维护的Web应用程序。在学习Castle Monorail时,你需要了解的主要知识点包括: 1. **MVC...

    MonoRailSample.rar

    MonoRail学习笔记一:一个小例子 随着微软放出消息,准备发布MVC的框架,各种议论纷至沓来。 以前用java、jsp对它的MVC结构、集中控制印象特别深刻,自从用了.NET后,虽然webform的控件很好用,总感觉有点怪怪的 ...

    monorail的小例子

    `MonoRail`目录很可能是Monorail框架的核心代码库,可能包含了各种类库和接口,用于构建MVC(Model-View-Controller)架构的应用程序。在这个目录中,我们可以找到如控制器基类、路由系统、视图引擎以及模型绑定等...

    ShoppingCart-MonoRail.rar

    《MonoRail:构建高效Web应用的框架探索》 MonoRail,这个名字在IT行业中或许并不如ASP.NET那样耳熟能详,但它却是.NET平台上的一个强大且灵活的Web应用程序框架。"ShoppingCart-MonoRail.rar"这个压缩包,包含了对...

    Monorail PaginationHelper.CreateCustomPage 自定义分页

    Monorail是基于.NET平台的一个MVC(Model-View-Controller)框架,它简化了Web应用程序的开发过程,提供了一种更为清晰的方式来构建Web应用。在Monorail框架中,分页功能通常通过`PaginationHelper`类实现,而`...

    MonoRail .net

    MonoRail .NET是一个开源的Web应用程序框架,设计用于替代ASP.NET,它提供了更灵活的开发模式和更高的可扩展性。 MonoRail这个名字来源于铁路系统中的单轨列车,寓意其为单一轨道上的应用程序框架,强调轻量级和高效...

    MonoRail 实体类生成器

    MonoRail是.NET平台上的一款轻量级MVC(Model-View-Controller)框架,它提供了丰富的功能和灵活性,使得开发者能够更高效地构建Web应用程序。而实体类作为数据模型的核心组成部分,通常需要与数据库表结构一一对应...

    MonoRail+IBatisNet +Velocity

    MonoRail、IBatisNet 和 Velocity 是三个在C#开发中常用的技术框架,它们分别用于不同的领域,但在实际项目中常被结合使用以构建高效、灵活的Web应用。下面将详细介绍这三个技术及其组合使用的要点。 **MonoRail** ...

    monorail的过滤器

    Monorail是一个开源的Web应用程序框架,主要用于构建ASP.NET应用程序。在Monorail中,过滤器(Filter)是一个强大的机制,它允许开发者在特定的HTTP请求生命周期的不同阶段插入自定义的行为。过滤器在Web开发中扮演...

    monorail简单例子

    MVC模式将应用程序分为三个主要组件:模型(Model)处理业务逻辑和数据管理,视图(View)负责展示用户界面,而控制器(Controller)则是这两者之间的桥梁,处理用户请求并决定如何响应。 在"MonoRailSample"这个...

    ibatisnet+monorail+vs2010

    通过学习和实践这个"ibatisnet+monorail+vs2010"项目,开发者可以深入理解如何在.NET环境中集成和使用这些技术,提高Web开发技能。同时,这个实例也展示了如何在一个现代化的开发环境中实现灵活的数据访问和高效的...

    monorail项目-留言簿-GeustBook.rar

    本文将深入探讨Monorail项目中的GuestBook组件,包括其设计思路、技术实现以及在实际应用中的价值。 1. 设计理念与架构 Monorail项目遵循MVC(Model-View-Controller)设计模式,这是一种在Web开发中广泛采用的...

    MonoRail 上传文件 整合FCK

    MonoRail是.NET平台上的一款轻量级的Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)模式支持,旨在提供比ASP.NET更灵活、更可扩展的开发环境。在 MonoRail 中实现文件上传功能,特别是整合...

    RAILS::monorail:RAILS 和 :man’s_shoe::hammer:鞋匠

    它们可用于使用任何长的、最好是高质量的序列(例如来自另一个基因组草图的 scaftigs/contigs)来构建和完成高质量的基因组草图组装。 它们都依赖于准确的长 DNA 序列来修补现有基因组组装草案中的空白。 Cobbler...

    MonoRail入门实例

    本教程将引导你逐步了解MonoRail的基本概念和使用方法,包括filter、home、rescue、routing和layout这五个关键部分。 1. **MonoRail框架介绍** MonoRail是由Castle Project开发的,它借鉴了Ruby on Rails的设计...

    MonoRail+实体类生成器.rar

    MonoRail是 Castle Project 的一部分,它是一个开源的.NET Web 应用程序框架,设计用于替代ASP.NET,提供更灵活的MVC(Model-View-Controller)架构。MonoRail这个名字是“Monorail”和“Rails”(Ruby on Rails)的...

Global site tag (gtag.js) - Google Analytics