10-Nancy文档教程——超级简单的视图引擎

超级简单的视图引擎

原文地址:https://github.com/NancyFx/Nancy/wiki/The-Super-Simple-View-Engine

 

超级简单的视图引擎又被称作SSVE,是一种基于视图引擎的正则表达式。它被设计用来实现简单的模板方案,因此很多你在其它模板看到的特性,它可能是不支持的。

你使用这个引擎的时候并不需要再安装一个Neget,因为它已经嵌入到Nancy的主要配置中了,所以它内部会自动连接起来,你只需要使用就可以了。该引擎可以处理 sshtmlhtml  htm 格式的文件。

Modles可以是标准类型或者ExpandoObjects (而事实上,任何实现了IDynamicMetaObjectProvider的类型都可以实现 IDictionary<string, object>来访问它的属性)。

所有的命令都有一个用来消除模糊概念的可选点号分隔符。任何一个[.Parameters]参数都可以是多层次的。比如: This.Property.That.Property

因为SSVE是基于视图引擎的正则表达式,它并没有“执行代码”,所以你不能随意指定你自己的代码块来让它执行。下面是它可以接受的语法和命令。

请注意,表达式中的所有引号都应该是单引号。

 

标准的变量替换

用参数的字符串形式来替换,如果没有指定参数,那么参数就是模型本身。如果要字符串无法被解析出来,或者如果你指定了一个非法的model属性,那么它会由[Err!] 替换掉。

语法:

@Model[.Parameters]

例子:

Hello @Model.Name, your age is @Model.User.Age

迭代器

确定你的model是可被遍历的集合。迭代器无法被嵌套。

语法:

@Each[.Parameters]
   [@Current[.Parameters]]
@EndEach

@Each 会隐式的关联到model而每一次遍历@Current就会将当前集合中的元素显示出来。在每一次遍历的代码块中,@Current可以多次被使用,访问形式和@Model是一样的。

例子:

@Each.Users
   Hello @Current.Name!
@EndEach

条件:

参数必须是boolean类型的(可以看下面的隐式条件)。@If@IfNot语句是不可以嵌套的。

语法:

@If[Not].Parameters
   [contents]
@EndIf

例子:

@IfNot.HasUsers
   No users found!
@EndIf

 

隐式条件:

如果model实现了ICollection那么你就可以使用隐式条件。隐式条件的语法和正常条件语法是一样的,只是Parameters参数)部分的字首有一个Has如果集合有当前值,那么条件就是true如果没有或者是null则是false

例子:

Has[CollectionPropertyName]

语法:

@If.HasUsers
   Users found!
@EndIf

上面这个简单的例子中,如果model中有一个Users集合并且含有值,那么“Users found!”就会被展开,否则就不会展开。

 

HTML编码

@Model@Currentkeywords(带或者不带参数)都可以在@后面加一个符号,来使HTML编码输出。

语法:

@!Model[.Parameter]
@!Current[.Parameter]

例子:

@!Model.Test
 
@Each
   @!Current.Test
@EndEach

 

布局

渲染一个局部视图。当前model的一个属性可以用一个局部视图模型来指定,否则默认使用当前视图引擎。文件扩展名是可选的。

语法:

@Partial['<view name>'[, Model.Property]]

例子:

// Renders the partial view with the same model as the parent
@Partial['subview.sshtml'];
 
// Renders the partial view using the User as the model
@Partial['subview.sshtml', Model.User];

 

模板页和布局

你可以将要共享的布局放在一个master页面中。然后在你需要显示的页面中声明内容部分。Master页面是允许嵌套的,而你并不需要为所有的内容部分填充内容。

Master页面可以找到你所要的视图的@model ,而当你指定master填充你的视图

时,文件扩展名是可选的。

语法:

@Master['<name>']
 
@Section['<name>']
@EndSection

例子:

// master.sshtml
<html>
<body>
@Section['Content'];
</body>
</html>
 
// index.sshtml
@Master['master.sshtml']
 
@Section['Content']
   This is content on the index page
@EndSection

 

防伪标记

在页面中隐式输入防伪标记,防止跨站点请求的伪造攻击。当一个新的请求被发送到服务器时,它会自动进行防伪验证(假设CSRF保护没有被关闭)。

语法:

@AntiForgeryToken

例子:

@AntiForgeryToken

 

路径扩展

将相对路径扩展成完整的路径。

语法:

@Path['<relative-path>']

例子:

@Path['~/relative/url/image.png']

 

扩展SSVE

SSVE是支持新增“匹配器”从而满足你的需求的。点这里(http://stackoverflow.com/questions/21910778/localization-in-nancy-without-the-razor-viewengine/23614404#23614404),有一个例子教你怎么新增匹配器。这篇教程中,描述了如何扩展SSVE来支持类似于“"@Text.TranslationKey"”(象征着Razor视图引擎)的文本翻译替换。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值