在razor中,除了简单的“融合”HTML和Model数据,还可以进行更复杂的逻辑
@{
int age = 23;
string name = "子祥";
//string greet = $"{name}今年{age}岁了,来源栈学习真是棒棒哒";
}
一个page里面可以有多个代码块。
语句块之间可以互相引用:
@{
int age = 23;
string name = "子祥";
}
<p>源栈欢迎你!</p>
@{
string greet = $"{name}今年{age}岁了,来源栈学习真是棒棒哒";
}
语句块中不建议声明方法、类、属性等(声明不会报错,但会将其自动变为functions块)
用于更复杂的方法、属性、类等的声明
@functions{
void greet(string name)
{
//return $"源栈欢迎您!{name}";
}
int Age { get { return 18; /*functions和code block之间,无法相互引用*/ } }
}
和语句块一样,functions块之间可以互相引用。
说明:不要把@{}当成C#中的作用域符号,它只是区分HTML代码和C#代码的!
演示:在代码块中再括起来一个变量……
在@{}和@functions{}中声明的变量、属性或有返回值的方法,可以在html标签中呈现出来。
@后接花括号(()),花括号中可以是:
<p>@(name)</p>
<p>@(Age)</p>
<p>@(greet("阿泰"))</p>
<p>@($"{name}今年{age}岁了,来源栈学习真是棒棒哒")</p>
总结起来,@()输出圆括号中的运算结果。
注意:表达式后面不要跟分号(;),代码块里必须要有分号(;)
在不影响编译的时候,也可以省略圆括号,比如:
<p>@Age</p>
<p>@greet("阿泰")</p>
其关键是:没有圆括号,@后面不能跟:
<p>@++age</p>
<p>@$"{name}今年{age}岁了,来源栈学习真是棒棒哒"</p>
<p>@name+"源栈"</p>生成的会是:子祥 + 源栈,不是:子祥源栈
另外,如果想要呈现出@符号的话,使用@@:
@@阿泰
实际上,.cshtml文件会被编译成为class。
在razor的代码块中制造一些错误,比如变量greet和方法greet()重名,然后查看报错页面
显示完整的编译源:
行 31: public class _Page_Views_Home_Index_cshtml : System.Web.Mvc.WebViewPage<_17bang.Models.Student> {
行 35: #line 9 "C:\Users\86186\source\repos\17bang\17bang\Views\Home\Index.cshtml"
行 37: string greet(string name)
行 38: {
行 39: return $"源栈欢迎您!{name}";
行 40: }
行 56: public override void Execute() {
行 60: int age = 23;
行 61: string name = "子祥";
行 62: string greet = $"{name}今年{age}岁了,来源栈学习真是棒棒哒";
行 75: WriteLiteral("\r\n<h1>\r\n");
行 89: Write(greet);
#理解#:
PS:ASP.NET core项目中可查看完整源代码
我们还可以控制Html内容的呈现
比较两种注释:
@*<p>Razor注释:飞哥帅得一逼</p>*@
<!--
<p>HTML注释:飞哥帅得一逼</p>
-->
再次理解:客户端/服务器端
注意:@**@注释不能嵌套
@if...else...
@if (DateTime.Now.Ticks % 2 == 0)
{
string trainer = "源栈";
<p>被2整除</p>
@trainer
}
else /*前面不要再加@符号*/
{
<p>不能被2整除</p>
if (true)
{
}
@name /*name变量在之前代码块声明*/
}
@switch
@{
DayOfWeek day = DayOfWeek.Monday;
}
@switch (day)
{
case DayOfWeek.Sunday:
<p>星期天</p>
break;
case DayOfWeek.Monday:
<p>星期一</p>
break;
//...
default:
break;
}
@和;的写与不写?
注意星期天前后一定要有html标签包裹(演示),如果你确实一个标签也不想要,可以使用text标签包裹:
<text>星期天</text>
@for
@for (int i = 0; i < 10; i++)
{
<p>@i</p>
}
@foreach
@while和@do...while
@using
@try...catch...finally
@try
{
int i = 0;
while (i < 10)
{
<p>@(i++)</p>
i++;
}
}
catch (Exception)
{
throw;
}

多快好省!前端后端,线上线下,名师精讲
更多了解 加: