按照asp.net core WEB應用程序嚮導,建立一個工程以後html
你會發現以下幾個目錄和文件jquery
下面咱們單獨說一下Pages目錄web
_Layout.cshtml 是整個網站的母板文件,sql
除了在這裏寫佈局頁面的代碼外,數據庫
你還能夠把一些基礎的樣式和腳本放在這裏,json
_ViewStart.cshtml 負責設置全部Razor頁面都會用到的Layout屬性,app
_ViewImports.cshtml 負責設置全部頁面都會用到的指令,好比引入什麼類庫等asp.net
_ValidationScriptsPartial.cshtml 負責引用驗證腳本,好比jquery的validation組件async
在appsettings.json文件中,你能夠防止數據庫連接字符串,好比這樣:函數
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "ConnectionStrings": { "MovieContext": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true" } }
ConnectionStrings就是數據庫連接字符串;
在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,還有待考察。
好,咱們如今看看怎麼經過數據庫上下文把數據從數據庫中拿出來
在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這樣的命名方式
構造函數經過依賴注入得到數據庫訪問上下文實例;
咱們再來看看.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指令使得這個頁面變成了一個ASP.NET MVC的Action
這個指令必須是在Razor Page的第一個指令
來看看下面這行代碼:
@Html.DisplayNameFor(model => model.Movie[0].Title))
這行代碼的特殊之處在於,不會存在違法訪問的異常,
也就是說model, model.Movie 和model.Movie[0] 的值是 null 或者empty時,不會報異常;
@model RazorPagesMovie.Pages.Movies.IndexModel
這個指令使得cshtml.cs文件中的IndexModel類,在這個Razor Page中有效
@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"
之後的文章裏咱們會說到!