前言
@符号在IT领域使用广泛,社交网站的@是提醒用户;Razor里面的@是服务器代码起始标记,二者不一样。
@作用
@是Razor语法的服务器代码块开始符号,@后面写C#服务器代码。
对比:aspx 使用<% %>作为服务器代码标记,php/jsp也有自己的标记。
两种核心写法
@{ } 代码块(多行C#语句)
写完整C#逻辑,定义变量、写业务逻辑,语句要带分号。
@{
Layout = null;
string webName = "Google";
int abd;
//Convert.ToInt32();
}Code language: JavaScript (javascript)
- 写在视图最上方;
- 里面执行C#,不会直接输出到页面;
- 变量在此定义,后面html可以引用。
@表达式 输出表达式(直接输出值到页面)
不需要分号,把变量、方法返回值渲染输出到html页面。
<div>@DateTime.Now.ToString()</div>
@{
string str = "dddd";
}
<div>@str</div>Code language: HTML, XML (xml)
浏览器渲染结果:
hello Google
2016/9/24 9:23:38
dddd
@{ 语句; } 行内代码块(页面内局部写语句)
<p>@{string str = "dddd";}</p>Code language: HTML, XML (xml)
这里只是执行赋值,不会输出内容;想要显示,需要再写
@str输出。
@foreach / @if 流程控制
Razor支持直接在html中写C#流程控制,@foreach、@if,大括号内部可以混合html标签。
<b>执行C# 普通代码:</b><br />
@DateTime.Now.Date.ToShortDateString()
<br />
<b>执行纯C#语句段:</b>
@{
List<string> list = new List<string>() { "MVC3", "Razor" };
list.Add(".Net4");
list.Add("");
}
<ul>
@foreach (string s in list)
{
if (string.IsNullOrEmpty(s))
{
<li>空</li>
}
else
{
<li>@s</li>
}
}
</ul>Code language: PHP (php)
控制器代码(对应这个视图)
public ActionResult Index()
{
return View();
}Code language: PHP (php)
总结
@{ ... }:执行C#多行语句,执行,不输出,代码末尾必须分号;@变量 / @方法():输出结果到网页,不加 ;;@foreach、@if:Razor流程关键字,大括号内可以穿插HTML;- Razor视图把C#服务器代码 和 HTML写在一起,服务器执行完C#,生成普通html返回浏览器。