天天看點

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檔案中,你可以防止資料庫連結字元串,比如這樣:

ConnectionStrings就是資料庫連結字元串;

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

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

接下來你就可以寫實體,完成相應資料的增删改查了;

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

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

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

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

第三行是更新資料庫;

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

好,我們現在看看怎麼通過資料庫上下文把資料從資料庫中拿出來

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

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

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

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

構造函數通過依賴注入獲得資料庫通路上下文執行個體;

我們再來看看.cshtml檔案的代碼:

Razor引擎可以把上面這些HTML代碼轉成C#代碼或者轉成Razor過度代碼;

當一個 @ 符号後面跟的是Razor保留關鍵字的話,他會被轉義成Razor過度代碼,否則會被轉義成C#代碼;

這是在編譯期完成的工作,是以不會影響運作期的執行效率;

@page指令使得這個頁面變成了一個ASP.NET MVC的Action

這個指令必須是在Razor Page的第一個指令

來看看下面這行代碼:

這行代碼的特殊之處在于,不會存在違法通路的異常,

也就是說model, model.Movie 和model.Movie[0] 的值是 null 或者empty時,不會報異常;

這個指令使得cshtml.cs檔案中的IndexModel類,在這個Razor Page中有效

你可以在Razor Page頁面中設定ViewData的鍵值,在_Layout.cshtml模版頁面中使用你設定的ViewData

在Razor Page中,用下面的方式寫注釋

在_ViewStart.cshtml檔案中,我們為所有的頁面設定了主機闆頁,代碼如下:

以後的文章裡我們會說到!