在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; }
多快好省!前端后端,线上线下,名师精讲
更多了解 加: