日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core教程【一】关于Razor Page的知识

發布時間:2025/3/20 asp.net 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core教程【一】关于Razor Page的知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關鍵文件和目錄結構

按照asp.net core WEB應用程序向導,創建一個工程之后

你會發現如下幾個目錄和文件

  • wwwroot:放置網站的靜態文件的目錄
  • Pages:放置razor頁面的目錄
  • appsettings.json:是應用的配置文件
  • bower.json:靜態資源包管理的配置文件
  • Program.cs:這個程序負責承載ASP.NET Core應用
  • Startup.cs:初始化service的配置,初始化請求管道

下面我們單獨說一下Pages目錄

_Layout.cshtml 是整個網站的母板文件,

除了在這里寫布局頁面的代碼外,

你還可以把一些基礎的樣式和腳本放在這里,

_ViewStart.cshtml 負責設置所有Razor頁面都會用到的Layout屬性,

_ViewImports.cshtml 負責設置所有頁面都會用到的指令,比如引入什么類庫等

_ValidationScriptsPartial.cshtml 負責引用驗證腳本,比如jquery的validation組件

數據庫鏈接字符串放在哪兒

在appsettings.json文件中,你可以防止數據庫鏈接字符串,比如這樣:

{"Logging": {"IncludeScopes": false,"LogLevel": {"Default": "Warning"}},"ConnectionStrings": {"MovieContext": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"} }

ConnectionStrings就是數據庫鏈接字符串;

在Startup中依賴注入數據庫鏈接上下文對象

在Startup.cs文件中,有一個ConfigureServices方法,你可以通過依賴注入的方式,加載數據庫連接上下文,比如這樣:

public void ConfigureServices(IServiceCollection services) {// 需要引用如下兩個類庫// using RazorPagesMovie.Models;// using Microsoft.EntityFrameworkCore;services.AddDbContext<MovieContext>(options =>options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));services.AddMvc(); }

說明:這里用到了Microsoft.EntityFrameworkCore,要先通過nuget包管理器,引入包,相關內容不作贅述;

接下來你就可以寫實體,完成相應數據的增刪改查了;

數據庫表結構同步工具

往往我們寫了實體類型,還需要把實體類型做成數據庫結構,非常麻煩

這里你可以用microsoft.visualstudio.web.codegeneration.design,這個包來完成相應的工作,相關的命令如下:

Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 2.0.0 Add-Migration Initial Update-Database

第一行是安裝這個工具包;

第二行是根據DbContext所引用的實體類,生成數據庫表結構的同步代碼;

第三行是更新數據庫;

這個工具包是不是只支持EF,還有待考察。

Razor頁面的PageModel類

好,我們現在看看怎么通過數據庫上下文把數據從數據庫中拿出來

在Pages目錄下,創建一個Razor頁面

在相應的cshtml.cs文件中,撰寫如下代碼:

using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Threading.Tasks; using RazorPagesMovie.Models;namespace RazorPagesMovie.Pages.Movies {public class IndexModel : PageModel{private readonly RazorPagesMovie.Models.MovieContext _context;public IndexModel(RazorPagesMovie.Models.MovieContext context){_context = context;}public IList<Movie> Movie { get;set; }public async Task OnGetAsync(){Movie = await _context.Movie.ToListAsync();}} }

說明:Movie是與數據庫表結構對應的實體類;

Razor頁面繼承自PageModel類,按照約定,類名遵從[PageName]Model這樣的命名方式

構造函數通過依賴注入獲得數據庫訪問上下文實例;

關于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中,用下面的方式寫注釋

@*這里是注釋*@

關于全局的模版頁設置

在_ViewStart.cshtml文件中,我們為所有的頁面設置了母板頁,代碼如下:

@{Layout = "_Layout"; }

注意,在這里我們并沒有詳細講鏈接標簽: asp-page="./Edit" asp-route-id="@item.ID"

以后的文章里我們會說到!

總結

以上是生活随笔為你收集整理的ASP.NET Core教程【一】关于Razor Page的知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。