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

MonoRail学习笔记十三:NVelocity的增强功能

    博客分类:
  • .Net
阅读更多

之前我转载过一篇:《Velocity 模板使用指南》中文版[转] ,这个是基于最开始的Java版下的Velocity来说的。后来在castle的.NET版下又提供了一些增强功能,详见:NVelocity Improvements
本文结合一些小例子来具体谈谈这些增强功能的使用。
(有部分内容是直接翻译自NVelocity Improvements-_-)

一、支持数组参数
比如在Controller中定义如下方法:
publicvoidIndex()
{
PropertyBag.Add(
"instance",this);
}

publicstaticstringWelcome(paramsString[]args)
{
returnString.Join("-",args);
}
在vm中写:
$instance.Welcome('arg1','arg2')
那么回输出如下结果:
arg1-arg2

二、内置字典支持
对于一些传参的地方很方便,比如我们常用的一种方式:
$HtmlHelper.LabelFor('elementid','Name:',"%{class='required',accessKey='N'}")
那么会自动生成一个字典,里面包含class和accessKey两个条目

内置字典我们可以在很多场合用到,比如我们在Controller中定义一个方法:
publicstringDictionaryTest(stringname,IDictionaryattributes)
{
StringBuildersResult
=newStringBuilder("<inputtype=\"text\"name='"+name+"'");
foreach(objectkeyinattributes.Keys)
{
objectvalue=attributes[key];
sResult.Append(
""+key+"='"+value+"'");
}


sResult.Append(
"/>");

returnsResult.ToString();
}

然后在vm中调用:
$instance.DictionaryTest('id',"%{aa='aa1',value='aa2',value2='aa3'}")
会在页面中生成一个输入框,具体的html代码是:
<inputtype="text"name='id'aa='aa1'value='aa2'value2='aa3'/>

三、更强的foreach功能(这个功能比较好)
可以指定在foreach之前、之后等特定时候执行一些语句,具体语法如下:
#foreach($iin$items)
#each(thisisoptionalsinceitsthedefaultsection)
textwhichappearsforeachitem
#before
textwhichappearsbeforeeachitem
#after
textwhichappearsaftereachitem
#between
textwhichappearsbetweeneachtwoitems
#odd
textwhichappearsforeveryotheritem,includingthefirst
#even
textwhichappearsforeveryotheritem,startingwiththesecond
#nodata
Contentrenderedif$itemsevaluatedtonullorempty
#beforeall
textwhichappearsbeforetheloop,onlyifthereareitems
matchingcondition
#afterall
textwhichappearsaftertheloop,onlyofthereareitems
matchingcondition
#end
比如如下的一个例子:
#foreach($personin$people)
#beforeall
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
#before
<tr
#odd
Style
='color:gray'>
#even
Style='color:white'>

#each
<td>$person.Name</td>
<td>$person.Age</td>

#after
</tr>

#between
<tr><tdcolspan='2'>$person.bio</td></tr>

#afterall
</table>

#nodata
SorryNoPersonFound
#end
当我们$people中有两条记录时会生成以下html:
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
<trstyle='color:white'>
<td>John</td>
<td>32</td>
</tr>
<tr><tdcolspan='2'>Monorailprogrammer</td></tr>
<trstyle='color:gray'>
<td>Jin</td>
<td>12</td>
</tr>
<tr><tdcolspan='2'>Castleguru</td></tr>
</table>
当$people为null时会直接输出:
SorryNoPersonFound

四、枚举类型的改进
为了可读性,可以自己使用枚举类型的文字表达进行比较。
例:
publicenumOrderStatus
{
Undefined,
Created,
Dispatched
}
那么可以在vm中如下比较:
#if($order=="Undefined")
Sorry,butwedon'tknowthisorder.
#elseif($order=="Created")
Yourorderisbeingprocessed.Holdon!
#elseif($order=="Dispatched")
YourorderhasbeendispatchedthroughUPS.Crossyourfingers!
#end
(原文中好像有点问题,我重新改了一些代码)

Castle1.0 RC3中的新功能:
1、在vm中,方法和属性不再区分大小写,使用时可以不必记住大小写了
2、字典功能改进,在vm字典调用时可以直接使用以下方式(参见上面的内置字典支持):
key='value' key=1 key=1.2 key='1' $key='value' key=$value key='some$value'
分享到:
评论

相关推荐

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

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

    MonoRail基础学习文档和实例

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

    MonoRailSample.rar

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

    MonoRail例子(入门篇)

    MonoRail是 Castle Project 的一部分,它是一个开源的、基于.NET框架的Web应用程序开发框架,设计用于替代ASP.NET Web Forms,提供了更面向对象...继续学习和探索MonoRail的其他功能,将帮助你充分利用这个强大的框架。

    ibatisnet+monorail+vs2010

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

    monorail的小例子

    Monorail可能使用NVelocity或NHaml等模板引擎来解析和渲染视图。 4. **Routing** - 路由规则定义了URL如何映射到控制器方法。Monorail允许开发者自定义URL模式,以创建更加用户友好的URL。 5. **Middleware** - ...

    ShoppingCart-MonoRail.rar

    "ShoppingCart-MonoRail.rar"这个压缩包,包含了对MonoRail框架的一个经典实例——购物车应用,是我们深入了解和学习MonoRail的宝贵资源。 MonoRail是由Castle项目开发的一个轻量级的MVC(Model-View-Controller)...

    Monorail PaginationHelper.CreateCustomPage 自定义分页

    Monorail框架提供了`PaginationHelper.CreateCustomPage`方法来实现自定义分页功能,帮助开发者更灵活地控制页面数据的展示方式。 #### 二、Monorail框架简介 Monorail是基于.NET平台的一个MVC(Model-View-...

    MonoRail .net

    MonoRail支持多种视图引擎,如NVelocity或NHaml,允许开发者使用模板语言编写动态页面。 4. **模型(Models)**: 模型包含业务逻辑和数据,它们是应用程序的核心。在MonoRail中,模型类可以直接与数据库交互,或者...

    学习资料monorail

    然而,由于提供的信息较少,无法确定此处“学习资料monorail”具体指的是哪个方面,因此我将从Monorail的多个可能含义来展开讨论。 首先,如果Monorail是指一种编程框架,最知名的可能是 Castle Monorail,这是一个...

    monorail简单例子

    Monorail,中文常被称为“单轨框架”,是.NET平台上的一款轻量级Web应用程序...在深入学习Monorail时,你还会发现它对测试驱动开发(TDD)友好,支持依赖注入(DI)以及插件架构,这些都是它成为开发者选择的重要因素。

    MonoRail+IBatisNet +Velocity

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

    MonoRail 实体类生成器

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

    monorail的过滤器

    Monorail是一个开源的Web...总的来说,Monorail的过滤器机制提供了强大的功能,可以帮助开发者在不侵入业务逻辑的情况下增强应用程序的功能和安全性。通过合理地使用过滤器,你可以创建更健壮、可扩展的Web应用程序。

    MonoRail 上传文件 整合FCK

    在 MonoRail 中实现文件上传功能,特别是整合FCKeditor(一款富文本编辑器),可以极大地提升用户在网页上的编辑体验。 一、MonoRail上传文件 在MonoRail中处理文件上传,首先需要了解HTTP协议中的多部分/表单数据...

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

    谢谢你的 RAILS v1.5.1 和 Cobbler v0.6.1 雷内 L.沃伦,2014-2021 电子邮件:bcgsc.ca 的 rwarren 名称 RAILS: Radial Assembly Improvement by Long Sequence Scaffolding Cobbler: Gap-filling with long ...

    monorail项目-文件管理-MvcFileManage.rar

    Monorail的MVC架构使得这些功能的实现更加直观和模块化,通过定义控制器动作,结合视图模板,可以轻松地构建出用户友好的文件管理系统。 在Monorail的文件管理中,可能会用到的技术包括HTTP上传机制、文件流处理、...

    MonoRail+实体类生成器.rar

    MonoRail+实体类生成器是针对这个框架的一个工具,它的主要功能是自动生成与数据库表结构对应的实体类。在软件开发过程中,数据访问层通常需要大量的实体类来表示数据库中的表,这些类通常包含了数据库表的字段属性...

    monorail项目-留言簿-GeustBook.rar

    此外,Monorail项目可能与其他服务集成,例如通过API与社交媒体平台共享内容,或者使用第三方服务进行垃圾信息过滤。 7. 测试与部署 在开发过程中,单元测试和集成测试是必不可少的,以确保每个组件都能正常工作。...

Global site tag (gtag.js) - Google Analytics