文档库 最新最全的文档下载
当前位置:文档库 › MVC 3.0 新的Razor引擎 (7)

MVC 3.0 新的Razor引擎 (7)

MVC 3.0 新的Razor引擎 (7)
MVC 3.0 新的Razor引擎 (7)

我要学https://www.wendangku.net/doc/514032489.html, MVC 3.0(七):MVC 3.0 新的Razor引擎

概述

随着MVC 3.0的发布,越来越多的人都纷纷投入了基于MVC 3.0的开发,不仅如此,MVC 3.0的Razor引擎更是在UI上给力,使得表单数据显示变得更加简便,给人眼前一亮的感觉。

一开始的W ebForm页面Htm l标签和C#代码混用看上去杂乱,而且<% %>标记成对出现,有时代码太混乱了都找不到前后标记,杯具啊!!!

MVC 3.0 新的W ebPages设计,他给我们简洁的代码实现方案。简单的@标记就可以代替成对出现的<% %>,使用起来方便快捷。

实例代码:Razor之简

ASPX

Razor

非常明显,Razor在内部帮我们做了闭合<%%>其实就是这个小小的闭合让我们可以在htm l内更加“流畅”的调用服务端代码。可见Razor的出现还是很给力的!!!

Razor(CSHTML)引擎

_appstart.cshtml :

应用程序启动时在Global. Application_Start方法后执行。

用于进行App的初始化时,需要进行处理的内容.例:向数据库记录系统初始化的一些信息。

功能与Global.Application_Start类似,差别在于:Global的Start先执行,然后在到该_appStart,值得注意的是在_appStart上下文中可以使用.NET4的dynam ic新特性,作为属性、字段、索引器、参数、返回值或类型约束的类型。

_Layout.cshtml:

布局页面即和aspx的母版页相似。

Razor基础语法

Razor语法其实很简洁就是以@开头,输出变量要以@开头,循环判断for if等还是以@开头,代码体更是要以@开头。。

代码注释

@*输出变量*@

上下文使用变量

@{

ViewBag.Title = "主页"; }

@*输出变量*@

这是 @ViewBag.Title

效果

输出Html内容

@{

ViewBag.Title = "主页"; }

@*输出Html内容*@

@{

@ViewBag.Title

DIV

}

效果

支持C#语法

@* 支持C#语法*@

@{

var list = new List{ "张三", "李四", "王五", "赵柳" }; foreach (var person in list)

{

  • @person
  • }

    }

    效果

    支持逻辑关键字如foreach if else等

    @{

    ViewBag.Title = "主页";

    @* 支持C#语法*@

    @{

    var list = new List{ "张三", "李四", "王五", "赵柳" }; }

    @* 支持逻辑关键字如foreach if else等*@

    @foreach (var person in list)

    {

  • @person
  • }

    效果

    逻辑判断

    @{

    ViewBag.Title = "主页";

    }

    @* 支持C#语法*@

    @{

    var list = new List{ "张三", "李四", "王五", "赵柳" }; }

    @* 逻辑判断*@

    @if (list.Count > 0)

    {

    foreach (var person in list)

    {

  • @person
  • }

    效果

    文字输出变量输出

    @{

    ViewBag.Title = "主页";

    }

    @* 支持C#语法*@

    @{

    var list = new List{ "张三", "李四", "王五", "赵柳" }; }

    @* 文字输出变量输出*@

    @{

    @:(*^__^*) 嘻嘻

    @:@list[0]

    }

    效果

    数据类型强制转换

    @*数据类型强制转换*@

    @{

    var i = "10";

    }

    i = @i.AsInt()

    效果

    循环

    @{

    ViewBag.Title ="主页"; }

    @*支持C#语法*@

    @{

    var list =new List{ "张三", "李四", "王五", "赵柳"}; }

    @*循环*@

    @for (int j =0; j

    {

    @:@j:

    @:@list[j]

    }


    @*第二种写法*@

    @{

    for(int j =0; j

    {

    @:@j:

    @:@list[j]

    }

    }

    效果

    Razor自定义控件

    看看微软自己提供的登录和注销

    ASPX

    LogOnUserControl.ascx页面

    <%@ Control Language="C#"Inherits="System.Web.Mvc.ViewUserControl"%> <%

    if(Request.IsAuthenticated) {

    %>

    欢迎使用<%: https://www.wendangku.net/doc/514032489.html, %>!

    [ <%: Html.ActionLink("注销", "LogOff", "Account") %>]

    <%

    }

    else{

    %>

    [ <%: Html.ActionLink("登录", "LogOn", "Account") %>]

    <%

    }

    %>

    Razor

    _LogOnPartial.cshtm l页面

    @if(Request.IsAuthenticated) {

    欢迎使用@https://www.wendangku.net/doc/514032489.html,!

    [ @Html.ActionLink("Log Off", "LogOff", "Account") ]

    }

    else {

    @:[ @Html.ActionLink("登录", "LogOn", "Account") ]

    }

    调用

    ASPX

    Site.Master页面

    <%Html.RenderPartial("LogOnUserControl"); %>

    Razor

    _Layout.cshtm l页面

    @Html.Partial("_LogOnPartial")

    关于布局母板以后再探讨。。

    总结

    从没有接触过Razor的我,今天在做了这么多练习后,突然对Razor引擎有了莫名的好感,感觉很给力。不知大家有没有这种感觉。。

    希望MVC在以后的版本里面能够持续出新,在编码方式上带给我们新的享受。。。

    js模版引擎handlebars

    js模版引擎handlebars.js实用教程——each嵌套 1 2 3 4 5each嵌套 - by 杨元 6 7 8

    each嵌套

    9 10
    11 12 13 14 15 16 17 18 19 26 27

    28 55 56

    jetTemplate模板学习和使用

    一、如何配置jetTemplate ? ? ? ? ?

    拓展方法:可以非常好的进行格式化处理和一些小的模板处理。

    ?? ??? ???? ?

    ?o o

    二、model and view 我们发现在这一块基本上没有什么区别,把数据对象放在map中,在后面的页面就可以帮我们完成整个的处理。 返回值表示对应的html文件。 这一块没有什么问题。这一块非常方便。 三、页面的布局 jetbrick-template samples

    #for(UserInfo user: userlist) #end
    ID 姓名 邮箱 书籍
    ${user.id} ${https://www.wendangku.net/doc/514032489.html,} ${user.email} 书籍列表
    #include("includes/footer.jetx")

    整个的思路也非常简单,就是使用#include和#tag layout_block("mainContent")两个标志就可以搞定了。 四、页面渲染 这一块也很简单,看上面的例子和官网上的说明就OK了。

    Twig模板引擎使用笔记

    Twig模板引擎使用笔记 安装配置 1.新建一个目录 libs 2.在该目录下新建文件 composer.json,往该文件写入以下内容: 3.{ 4. "require": { 5. "twig/twig": "1.*" 6. } 7.} 8.在 libs 目录上执行 composer install 安装 Twig(前提是已安装 Composer 包管理器) 9.在 libs 上级目录新建三个文件夹:templates、templates_c、web,其中 templates 用来存放 模板文件,templates_c 用来存放编译缓存文件,web 用来存放 PHP 源文件 10.在 libs 上级目录新建文件 MyTwig.php 公共文件,内容如下: 11.// 引用 Composer 自动加载文件 12.require_once dirname(__FILE__).'/libs/vendor/autoload.php'; 13. 14.// 注册 Twig 加载器 15.Twig_Autoloader::register(); 16. 17.// 设置基本的配置项 18.$loader = new Twig_Loader_Filesystem(dirname(__FILE__).'/templates'); 19.$twig = new Twig_Environment($loader, array( 20. 'cache' => dirname(__FILE__).'/templates_c', 21. 'auto_reload' => true 22.)); 23.后续使用时,只需让 web 目录下的 PHP 文件引用该公共文件,且在 templates 目录下放置好 对应的模板即可,引用公共文件的语句为:require_once dirname(dirname(__FILE__)).'/MyTwig.php'; 24.基本的模板渲染语句:echo $twig->render('abc.html.twig', array('name' => 'Ruchee')); 可用符号 == != < > >= <= + - ~ * / // % ** | [] . .. and or not in is b-and b-or b-xor 部分符号的含义如下 ?~:连接两字符串,相当于 PHP 中的点号 ?//:整除 ?**:乘方,相当于 PHP 中的 ^ ?b-and、b-or、b-xor:按位与、按位或、按位异或 ?-:减法以及去除空白的简写用法,如 {{- 数据 }} => 去除左边的空白、{{ 数据 -}} => 去除右边的空白、{{- 数据 -}} => 去除两边的空白

    20个代码生成框架

    20个代码生成框架 1 1.1 CodeSmith 一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://https://www.wendangku.net/doc/514032489.html, 官方论坛:http://https://www.wendangku.net/doc/514032489.html,/default.aspx 版权形式:30天试用 开源:否 需要先注册确认后才能下载 1.2 MyGenerator MyGenerator是又一个国外很不错的代码生成工具,有人觉得比CodeSmith简单、好用。 所有api可以在帮助菜单中找到。 官方网站:http://https://www.wendangku.net/doc/514032489.html,/portal/default.aspx 官方论坛: 版权形式:免费 开源:否 1.3 NHibernate. NHibernate是Hibernate公司在Java自动生成领域取得巨大成功后推出的一款ORM工具. 官方网站:http://https://www.wendangku.net/doc/514032489.html,/ 官方论坛: 版权形式:免费 开源:否 1.4 湛蓝.Net代码生成器

    一款基于软件自动生成理念,能直接生成应用的dotnet代码生成器 官方网站:http://https://www.wendangku.net/doc/514032489.html, 官方论坛:http://https://www.wendangku.net/doc/514032489.html,/ 版权形式:免费 开源:否 1.5 动软.NET代码自动生成器 一款人气很旺的免费C#代码生成器 官方网站:http://https://www.wendangku.net/doc/514032489.html, 官方论坛: 版权形式:免费 开源:否 1.6 CodePlus 专为sql server c#语言设计的代码生成器,功能还是很强大 官方网站:http://https://www.wendangku.net/doc/514032489.html, 官方论坛: 版权形式:需要少量的注册费用 开源:否 下载地址很神秘 1.7 CodeMaker asp,jsp,php代码生成工具,自动生成维护数据库信息的动态网页的代码生成器。它可以帮助ASP、JSP、PHP开发人员快速的开发简单的数据库维护程序。无需任何编码,只需将数据库结构导入到CodeMaker中并做简单的设置,CodeMaker即可生成完整的数据库操作页面。用CodeMaker可以简单快速的创建网站后台维护程序。提高开发效率数十倍以

    CMS系统模版引擎设计(3):Label基类的设计

    上节讲了页面的整个生产流程,大家都期待第三篇,也就是生产的核心内容——Label的替换。说实话,我很有压力啊:)一个人一个实现思路,所以...可能你不能接受。 我的标签分为2种,一种是配置变量标签(就是站点和系统的Config),用%变量名%表示,在初始化Labels之前是要执行替换的。另外一种就是数据调用的Label咯。看下风格: //简单的循环列表 {Article:List Top="10" CategoryId="5"} [field:Title/] {/Article:List} //引用用户控件模版,CategoryId是需要传递的参数 {System:Include TemplateId="5" CategoryId="7"/} //详情页模版 {Article:Model ArticleId="Url(articleid)"}

    [field:Title/]

    {/Article:Model} {Artcile:Model name="PostTime"dateformat="yyyy年MM月dd日"/} 大家可以看出点端倪了吧,格式都是统一的。我来说下: Article:List:是Article模块下的List标签 Top :调用条数 CategoryId:分类ID 当然还支持其他的属性比如Skip,Class,Cache等等,这些属性关键是看List标签的支持度。 下面的...当然是循环部分,而[field:FieldName/]则是具体的字段,接着是关闭标签。 但例如System模块的Include标签却没有内容部分。 而详情页的字段展示和列表不同,他的字段可以任意位置摆放。所以可以下面的那个Model虽没有ID也可以输出:)这些七七八八的细节比较多。 我们如何解释这些标签代码呢?

    Discuz模板引擎标签

    Discuz模板引擎标签 2009-06-03 09:18 Discuz! 的模板采用近似 PHP 表达式的语法,支持的元素如下: 1. 逻辑元素包围符,该符号用于包含条件和循环元素,其中: statement1 statement2 statement3 为一个典型的条件模板,当条件 expr1 为真时,显示模板 statement1 内容;否则当 expr2 为真时,显示模板 statement2 内容,否则显示模板 statement3 的内容.如同 其他语言中的条件控制一样,其中 和 是非 必须的. statement 相当于 PHP 的数组循环语句 foreach($array as $value) { statement } 而 statement 相当于 PHP 的数组循环语句

    foreach($array as $key => $value) { statement } 逻辑元素包围符在 { } 外面包含了 html 的注释符号 ,除了为了和信息元素 相区别外,也方便了使用 Dreamweaver 和 Frontpage 之类工具编辑模板的用户.因逻 辑元素会被识别为 html 的注释而不被显示,对于绝大多数用户,逻辑元素中的内容是 完全不需要修改的,甚至修改错一个字符就可能引起错误信息和整个系统无法运行.因 此通常您在修改模板的时候,不要修改模板的逻辑信息,更不要将逻辑信息内部元素(如 等)的位置,否则可能会导致错误.如果您的模板被不慎修改损坏,请立 即用原始模板覆盖,即可恢复. 对于高手而言,实际上外部的 是可以省略不写的,可以用于某些元素在模板 中的定位,但强烈建议普通用户不要轻易尝试. 2. { ... } 信息元素包围符,其中 {CONSTANT} 可以引用界面替换变量,其中必须为大写字母,该符号实际的作用是引用 PHP 常量 CONSTANT,因此也可以通过它来引用其他的常量内容. {lang variable} 可以在模板中引用语言变量 variable 的内容,语言变量经由 https://www.wendangku.net/doc/514032489.html,ng 中数组 $language 定义. 如 {lang post_edit} 的内容在编译模板的时候被替换为 $language['post_edit'] 的内容,简体中文版的意思是 "编辑帖子". {faq variable} 可以在模板中引用论坛帮助的帮助关键字,在后台=>其他设置=》论坛帮助=》具体某个帮助的详情可以看到或者设置 3. {template name} 模板嵌入符,为了避免模板的冗长,可以使用本符号来将 name 模板的内容嵌

    Smarty模板技术讲解

    模板引擎Smarty 目录 模板引擎Smarty (1) 一、模板引擎 (2) 1、混合式编程(HTML+PHP) (2) 2、项目的开发流程 (2) 3、什么是模板引擎 (2) 4、模板引擎原理 (3) 二、Smarty模板引擎 (5) 1、什么是Smarty模板引擎 (5) 2、为什么要学习Smarty (5) 3、下载安装 (6) 4、Smarty项目部署(三步走) (6) 5、Smarty入门五步走 (6) 三、详解Smarty工作流程 (8) 1、smarty执行流程 (8) 2、smarty执行原理图 (9) 3、几个常用属性 (9) 1)分界符 (9) 2)与路径相关的四个属性 (9) 3、默认值 (10) 4、常用的方法 (11) 四、设计篇 (11) 1、模板注释 (11) 2、模板中的变量 (12) 1)从PHP中分配的变量 (12) 2)从配置文件中读取变量 (14) 3)在模板中直接定义变量 (14) 3、Smarty中的常用保留变量 (15) 4、变量调节器 (16) 五、内建函数(sysplugins) (20) 1、capture函数 (20) 2、config_load函数 (20) 3、include_php函数 (21) 4、insert函数 (22) 5、if elseif else函数 (23) 6、ldelim、rdelim函数 (24) 7、literal函数 (25) 8、foreach函数 (25) 六、作业: (27)

    一、模板引擎 1、混合式编程(HTML+PHP)

    编号 手机名称 价格
    优点:开发迅速、语法简介 缺点:后期维护基本无效 2、项目的开发流程 设计效果图-确认-设计HTML+CSS+JS-整合PHP代码-上线测试-确认-发布-推广 设计师-程序员-测试-客户不满意-设计师-程序员-测试-客户不满意-… 把我们HTML+PHP进行完全分离 HTML:设计师 PHP:程序员 3、什么是模板引擎 模板引擎,是指利用某种模板语言将页面制成模板,再依据业务逻辑将该模板语言翻译成业

    js模版引擎handlebars.js实用教程——each嵌套+++

    1 2 3 4 5each嵌套 - by 杨元 6 7 8

    each嵌套

    9 10
    11 12 13 14 15 16 17 18 19 26 27 28 55 56 循环嵌套在稍微复杂点的页面设计中即会涉及,Handlebars.js完全支持each嵌套,可以在each中使用each。 上边的例子演示了两个关键点:each嵌套的可实现性、如何在each嵌套中读取父each中的数据。 例子很简单,info本身是一个信息列表,是属于某个人的,我们先用each遍历所有的人,然后再遍历每个人的info信息,这样就形成了each嵌套。但是我们想在内层each中获取外层each的数据,达到“谁的什么”这样的显示效果。

    CMS系统模板引擎设计(5):Label应用初探

    话说上节听的很郁闷,讲的也郁闷,整个系列没有详细的Code,所以都有点懵。其实仔细看之前的几节应该还是能够理解整个思路的。我在这里再整理一遍:用户访问URL后->根据所有Page的URL 规则(urlpattern)获取当前Page,然后再根据page的Template,Find出所有的Label(通过反射),然后遍历这些Label,把得到的数据的Html替换掉Label本身的标签代码。最后整个Template就是要生成的HTML了。 所以我们要明白Label是如何获取工作才能获取数据库的数据的。一个Label可以理解成一个控件,那么控件必然会支持一些属性(Parameter)和一些内容(Field)。我们上节就是在讲怎么来解析par ameter,因为有些特殊的parameter,所以设计的时候设计了parameter的基类,特殊的则是子类。 同样,field是具体的要展现在HTML代码中的字段,比如中的[field:Title/],这就是一个字段,我们的模版引擎的工作就是把他替换掉应该展现的标题,而如何才能工作?我们就得设计Field的整个逻辑。在替换循环的过程中使用field类。 但是,我今天不讲Field了,因为这样讲大家还是糊涂依旧。今天我们就来设计一个Article:List的初级版。我觉得或许从实例讲解大家更容易理解设计的理念。OK,那就开始设计一个Article.List,我们最熟悉的文章列表。 //简单的循环列表 {Article:List Top="10" CategoryId="5"} [field:Title/] {/Article:List} 想象一下Repeater,有个ItemTemplate,那么对于List这个Label来说,他的ItemTemplate 显然就是Template属性。那么如果我们获取到数据源后直接foreach替换掉所有的field即可。代码大概如下: ///

    ///获取要展示的HTML代码 /// /// public override string GetRenderHtml() { var html = TemplateString; foreach (var article in GetDataSource())

    一个简单的python模板引擎

    分享一个简单的python模板引擎 python模板引擎也很多,但是希望可以使用python原生的来作模板而不用在创建一个新的语法,但是python本身的缩进又不适合做模板所以要把缩进去掉就可以了 #coding:utf-8 __author__="sdm" __author_email='sdmzhu3@https://www.wendangku.net/doc/514032489.html,' __date__ ="$2009-8-25 21:04:13$" ''' pytpl 类似php的模板类 ''' import sys import StringIO import os.path import os #模板的缓存 _tpl_cache={} class Pytpl: def __init__(self,tpl_path='./'): self.tpl_path=tpl_path self.data={} self.output = StringIO.StringIO() pass def set(self,name,value): ''' 设置模板变量 ''' self.data[name]=value; pass def get(self,name): ''' 得到模板变量 '''

    t={} return t.get(name,'') pass def tpl(self,tplname): ''' 渲染模板 ''' f=self.tpl_path+tplname if not os.path.exists(f): raise Exception('tpl:[%s] is not exists' % f) mtime=os.stat(f).st_mtime if not _tpl_cache.has_key(f) or _tpl_cache[f]['time']

    ASP模板引擎

    ASP模板引擎 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一般ASP模板加载模板文件(加载组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性。 摘要: 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一般ASP模板加载模板文件(加载 组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性。 当前,WEB开发已经变得非常火爆,因为各种应用,已经约来越要求表现层和逻辑层的分离.ASP和HTML夹在一起程序将变得难于维护,可读性也差。在PHP领域,模板引擎已经非常普遍,如phplib,SMARTY,等等.有使用替换方式的,也有编译方式的(SMARTY),它们都较好的实现了逻辑层和表现层的分离.由 于PHP的影响,在ASP界有人借鉴phplib等使用替换的方法开发出asp的模板类,由于ASP在字符处理上性能并不是很强大,所以在速度上受到影响,这样的模板在目前的应用也不是很广泛。如: 1 2 3 4{$title} 5 6 7{$body} 8 9

    1 2<% 3TemplateCode=Load("template.html")'自定义函数,装载模板文件到TemplateCode 4TemplateCode=Replace(TemplateCode,"{$title}","asp模板引擎终结者")'替换模板 5TemplateCode=Replace(TemplateCode,"{$body}","asp模板引擎终结者内容")'替换模板 6Response.Write TemplateCode 7%> 上面的例子只是初步展示了当前ASP模板的思想,有ASP 版的CMS系统已经嵌入了对模板的逻辑控制,虽然能够实现逻辑和界面的分离,但是这种模板存在的问题就是模板需要每次都用ASP解析一次,程序相当于解析两次,而且当要替换的内容很多的时候,将会降低性能.而且装载模板需要服务器支持一种组件(FSO,ADODB,XMLHTTP均可实现). 借鉴于编译型的模板,我在ASP中引进这种思路.提出一种应用在ASP中的功能和性能都很优良的模板体系.下面用代码表示: 1 2 3 4 <%=title%> 5 6 7