RazorPage语法介绍(二)

RazorPage语法介绍(二)关于 RazorPage 的页面代码我们来看看 cshtml 文件的代码 page modelRazorPa Pages Movies IndexModel ViewData Title Index h2 Index h2 p aasp page Create CreateNew aasp page Create p

关于Razor Page的页面代码

我们来看看.cshtml文件的代码:

@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ 
    ViewData["Title"] = "Index"; } <h2>Index</h2> <p> <a asp-page="Create">Create New</a> </p> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { 
    <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> | <a asp-page="./Details" asp-route-id="@item.ID">Details</a> | <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a> </td> </tr> } </tbody> </table> 

Razor引擎可以把上面这些HTML代码转成C#代码或者转成Razor过度代码;

当一个 @ 符号后面跟的是Razor保留关键字的话,他会被转义成Razor过度代码,否则会被转义成C#代码;

这是在编译期完成的工作,所以不会影响运行期的执行效率;

关于page指令

@page指令使得这个页面变成了一个ASP.NET MVC的Action

这个指令必须是在Razor Page的第一个指令

关于违法访问的处理

来看看下面这行代码:

@Html.DisplayNameFor(model => model.Movie[0].Title)) 

这行代码的特殊之处在于,不会存在违法访问的异常,

也就是说model, model.Movie 和model.Movie[0] 的值是 null 或者empty时,不会报异常;

关于model指令

@model RazorPagesMovie.Pages.Movies.IndexModel 

这个指令使得cshtml.cs文件中的IndexModel类,在这个Razor Page中有效

关于ViewData

@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ 
    ViewData["Title"] = "Index"; } 

你可以在Razor Page页面中设置ViewData的键值,在_Layout.cshtml模版页面中使用你设置的ViewData

关于注释

在Razor Page中,用下面的方式写注释

@*这里是注释*@ 

其它C#语法

All code blocks must appear within @{ 
    ... } brackets. As soon as you type @, you are assumed to have started writing code. Everything that follows is assumed to be code, unless you tell Razor otherwise: @{ 
    var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10 foreach(var number in numbers){ 
    } } If you want to render the variable number within the loop above, you have to prefix it with an @ sign: @{ 
    var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10 foreach(var number in numbers){ 
    @number } } If you want to render the result of a single line expression, you use the @( ... ) syntax: @{ 
    var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10 foreach(var number in numbers){ 
    @(number * 10) } } If you want to mix inline variables with items to be rendered literally (verbatim strings) within a code block, there are three ways to tell Razor where the code pauses and the literal text or markup begins. The first, if the additional item is text only, is to prefix the text with @: before the first instance of text in the line: @{ 
    var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10 foreach(var number in numbers){ 
    @(number * 10)@:&nbsp; } } You only need to use the @: operator once per line: @{ 
    var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10 foreach(var number in numbers){ 
    @(number * 10)@: * 10 = @(number * 10) } } Razor also looks for html tags. If it sees one, it jumps out of code and will only jump back into code when it sees a matching closing tag: @{ 
    var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10 foreach(var number in numbers){ 
    <span>@(number * 10)&nbsp;</span> } } Razor can recognise self-closing tags: @{ 
    var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10 foreach(var number in numbers){ 
    @(number * 10)<br /> } } If you do not want to render html tags, you can use the <text> tag to tell Razor where code ends and begins again. The <text> tag is not rendered to the browser: @{ 
    var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10 foreach(var number in numbers){ 
    <text>@(number * 10) * 10 = @(number * 10)&nbsp;</text> } } Comments within a code block can denoted by two forward slashes //, as can be seen in all the preceding examples. Alternatively, you can use /*...*/ or @*...*@. If you want to put a server side comment outside of a code block, precede the line @* @{ 
    /*Get numbers from 1 - 10*/ //Get numbers between 1 - 10 @*Get numbers between 1 - 10*@ var numbers = Enumerable.Range(1, 10); foreach(var number in numbers){ 
    @number } } The following example illustrates two things - the first is commenting outside of code blocks using the @*...*@ syntax. The second is that iteration and selection statement keywords (if, for, foreach, switch, while etc) do not need curly braces before them. A simple @ sign will do. The same is true for try... catch, if you want to use that particular construct inline. @* Get numbers between 1 - 10 *@ @{ 
    var numbers = Enumerable.Range(1, 10); } @foreach(var number in numbers){ 
    @number } @for(var i = 0; i < numbers.Count(); i++){ 
    @numbers.ElementAt(i) } @if(numbers.Count() == 10){ 
    @:10 Numbers - Good! } @{ 
   var condition = 1; var message = "";} @switch(condition){ 
    case 1: message = "Case 1"; break; case 2: message = "Case 2"; break; case 3: message = "Case 3"; break; default: message = "Default Case"; break; } @message 

关于全局的模版页设置

在_ViewStart.cshtml文件中,我们为所有的页面设置了母板页,代码如下:

@{ 
    Layout = "_Layout"; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227713.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午8:42
下一篇 2026年3月16日 下午8:43


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号