在ASPX中我们使用 <% %>在里面编写C#代码
在Razor中我们将会使用@符号这个核心语法,给程序员提供了大量的便利,废话不多说,我一一举例:
1.首先如何定义变量,我们在 .cshtml 这个视图上,定义C#变量的话,我们可以先定义一个C#代码块,在这个代码块里编写C#语法
定义一个C#代码块:
@{ //定义一个变量 string name="我是一个字符串"; }
//输出这个字符串 @name
2.假如我们现在有一个需求,让我们输出10个<span>我爱北京天安门</span>,那么肯定要使用for循环了
@for(var i=0;i<10;i++){
<span>我爱北京天安门</span>
}
有同学可以有疑问了,为什么我们在C#代码段里面可以直接写html标签,ASPX里我们必须将C#代码放在<%%>中,因为Razor引擎有一个非常强大的功能,那就是自动识别<>(尖括号),当在Razor中遇到<>的时候,Razor会自动识别这里是Html语法,看到@符号就知道开始编写C#代码了。
//我们随便找一个 .cshtml 输出这一段话,表示输出视图程序集所在的路径 @this.GetType().Assembly.Location
会在页面上输出 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\vs\fc705515\4aff2ded\App_Web_ju12f1hu.dll 类似的路径,那么我们可以去找到此dll文件,将其拖入 .NET Reflector中。
//第一种方式
@{
var str = string.Empty;
for (var i = 0; i < 10;i++){
str += "我爱北京天安门";
}
}
@str
//第二种方式
@for (var k = 0; k < 10; k++) {
<text>我爱北京天安门</text>
}
//控制器
public ActionResult check()
{
Person p = new Person() { Name="aa" };
return View(p);
}
//视图
@for(var i=0;i<10;i++){
//我们在控制器传递数据到视图上,如果下面这种情况输出的话
<b>asdsad@Model.Name~~~~~</b>
}
//输出结果:asdsad@Model.Name asdsad@Model.Name asdsad@Model.Name asdsad@Model.Name asdsad@Model.Name asdsad@Model.Name asdsad@Model.Name asdsad@Model.Name asdsad@Model.Name asdsad@Model.Name
显然这不是我们想要的结果
那么我们如果更正呢?
我们需要在@符号前加一个空格,这样Razor就是识别了
<b>asdsad @Model.Name~~~~~</b>
//由此我们可以得到结论:
如果想在html中输出C#语句的话,@符号钱必须要加空格,否则将@符号当成字符串处理
//控制器
public ActionResult check()
{
Person p = new Person() { Name="aa" };
ViewBag.CName = "cc";
return View(p);
}
//视图
我要输出一个 cc.CName呢?
//这样输出,编译器会报错,编译器会解析为cc有一个CName属性,但是显然cc中没有这个属性
@ViewBag.CName.CName
//那么我们可以通过
@(ViewBag.CName).CName
//第一种方式
@{
string str="<input type=‘text‘ value=‘‘>":
}
@str
//输出结果
<input type=‘text‘ value=‘‘>
//这样输出的话,我们查看网页源代码会发现,我们书写的html的input标签的<>会被转义。显然不是我们想要的结果,如果我们想输出一个完全的input 标签呢
//第一种方式
使用@Html.Raw(str),输出不转义的html
//第二种方式
使用HtmlString输出不转义的html
@{
HtmlString htmlRaw=new HtmlString("<input type=‘button‘ value=‘按钮‘>");
}
@htmlRaw
//第三种方式
@{
MvcHtmlString mvcStr=new MvcHtmlString("<p>我不会被转义</p>");
}
@mvcStr
//第四种方式
//使用MvcHtmlString 静态方法 Create输出不转义的html
@{
var _str=MvcHtmlString.Create("<p>我是方式二</p>");
}
@_str
原文:http://www.cnblogs.com/changfutao/p/4998340.html