惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Webroot Blog
Webroot Blog
U
Unit 42
A
About on SuperTechFans
宝玉的分享
宝玉的分享
月光博客
月光博客
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Securelist
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
B
Blog
I
Intezer
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
V
V2EX
L
LangChain Blog
AI
AI
G
GRAHAM CLULEY
T
Tor Project blog
人人都是产品经理
人人都是产品经理
D
Docker
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
I
InfoQ
Y
Y Combinator Blog
C
Comments on: Blog
GbyAI
GbyAI
www.infosecurity-magazine.com
www.infosecurity-magazine.com
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
H
Help Net Security
Vercel News
Vercel News
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿

博客园 - 旋风

ASP.NET MVC3 Razor视图引擎-基础语法 二 ASP.NET MVC3 Razor视图引擎-基础语法 asp.net中 %= 与%# 的区别 ASP.NET MVC3 Model验证总结 ViewData与ViewBag比较 (十九): MVC 3.0 实例之使用开源控件实现表格排序和分页 (十八): MVC 3.0 实例系列之表格中合并排序、分页和筛选 (十七): MVC 3.0 实例之表格中数据的筛选 (十六): MVC 3.0 实例系列之表格数据的分页 (十五): MVC 3.0 实例系列之表格的排序 (十四): MVC 3.0 实例系列之创建数据表格 (十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击 (十二): MVC 3.0 使用自定义的Html控件 (十一): MVC 3.0 使用筛选器 (十): MVC 3.0 使用 Forms身份验证 (九): MVC 3.0 验证你的Model (八): MVC 3.0 传递和保存你的Model (六): MVC 3.0创建你的View视图 (五): 入手Controller/Action
七): MVC 3.0 新的Razor引擎
旋风 · 2012-12-07 · via 博客园 - 旋风

概述

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

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

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

实例代码:Razor之简

ASPX

<script src="<%: Url.Content("~/Scripts/jquery-1.4.4.min.js") %>" type="text/javascript"></script>

Razor

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>

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

Razor(CSHTML)引擎

_appstart.cshtml : 

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

用于进行App的初始化时,需要进行处理的内容.例:向数据库记录系统初始化的一些信息。
功能与Global.Application_Start类似,差别在于:Global的Start先执行,然后在到该_appStart,值得注意的是在_appStart上下文中可以使用.NET4的dynamic新特性,作为属性、字段、索引器、参数、返回值或类型约束的类型。

_Layout.cshtml:

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

Razor基础语法

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

代码注释

上下文使用变量

@{
ViewBag.Title = "主页";
}
@*输出变量*@
<h1>
这是 @ViewBag.Title
</h1>

效果

输出Html内容

复制代码

@{
ViewBag.Title = "主页";
}

@*输出Html内容*@
@{

<p>@ViewBag.Title</p>
<div>
DIV
</div>
}

复制代码

效果

支持C#语法

复制代码

@* 支持C#语法*@
@{
var list = new List
<string> { "张三", "李四", "王五", "赵柳" };
foreach (var person in list)
{
<li><a href="Index">@person</a></li>
}
}

复制代码

效果

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

复制代码

@{
ViewBag.Title = "主页";
}
@* 支持C#语法*@
@{
var list = new List
<string> { "张三", "李四", "王五", "赵柳" };
}
@* 支持逻辑关键字如foreach if else等*@
@foreach (var person in list)
{
<li><a href="Index">@person</a></li>
}

复制代码

效果

逻辑判断

复制代码

@{
ViewBag.Title = "主页";
}
@* 支持C#语法*@
@{
var list = new List
<string> { "张三", "李四", "王五", "赵柳" };
}

@* 逻辑判断*@
@if (list.Count > 0)
{
foreach (var person in list)
{

<li><a href="Index">@person</a></li>
}
}

复制代码

效果

文字输出 变量输出

复制代码

@{
ViewBag.Title = "主页";
}
@* 支持C#语法*@
@{
var list = new List
<string> { "张三", "李四", "王五", "赵柳" };
}
@* 文字输出 变量输出*@
@{
@:(*^__^*) 嘻嘻
@:@list[0]
}

复制代码

效果

数据类型强制转换

复制代码

@*数据类型强制转换*@
@{
var i = "10";
}
<p>
i = @i.AsInt()
</p>

复制代码

效果

循环

复制代码

@{
ViewBag.Title
="主页";
}
@
* 支持C#语法*@
@{
var list
=new List<string> { "张三", "李四", "王五", "赵柳" };
}
@
*循环*@
@for (
int j =0; j < list.Count; j++)
{
@:@j:
@:@list[j]
}
<br />
@
*第二种写法*@
@{
for (int j =0; j < list.Count; j++)
{
@:@j:
@:@list[j]
}
}

复制代码

效果


Razor自定义控件

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

ASPX 

LogOnUserControl.ascx页面

复制代码

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl"%>
<%
if (Request.IsAuthenticated) {
%>
欢迎使用
<b><%: Page.User.Identity.Name %></b>!
[
<%: Html.ActionLink("注销", "LogOff", "Account") %> ]
<%
}
else {
%>
[
<%: Html.ActionLink("登录", "LogOn", "Account") %> ]
<%
}
%>

复制代码

 Razor

_LogOnPartial.cshtml页面

复制代码

@if(Request.IsAuthenticated) {
<text>欢迎使用 <b>@Context.User.Identity.Name</b>!
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]
</text>
}
else {
@:[ @Html.ActionLink("登录", "LogOn", "Account") ]
}

复制代码

调用

ASPX

Site.Master页面

<div id="logindisplay">
<% Html.RenderPartial("LogOnUserControl"); %>
</div>

Razor

_Layout.cshtml页面

<div id="logindisplay">
@Html.Partial("_LogOnPartial")
</div>

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

总结

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

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