微軟把這個新的框架叫:Razor Pages,以下文中我們將頻繁提及—Razor Pages。
項目目錄結構
wwwroot靜態資源文件夾
首先,Razor Pages項目中多了一個wwwroot的文件夾,這個文件夾中,主要存放網站的靜態資源,如:
css:網站樣式文件
images:網站圖片資源文件
js:網站javascript腳本文件
lib:每三方的js庫等
favicon.ico: 網站的圖標
其次,Razor Pages項目中,沒有了Global.asax以及Web.config這樣的文件,但多了幾個其他主要的文件,它們分別為:
appsetting.json
appsetting.json:應用程序配置文件,類似於ASP.NET應用程序中的Web.config配置文件。
Program.cs
Program.cs:這是.NET Core的程序入口文件,其他包含了一個程序的入口方法:public static void Main(string[] args)
Startup.cs
Startup.cs: .NET Core應用程序啟動配置項目文件,在.NET Core CLI命令行工具或者Visual Studio為我們創建好ASP.NET Core應用程序之后,程序入口文件Program.cs會默認調用Startup.cs類中的ConfigureServices 和 Configure 方法,以初始化程序的各種配置。
Pages 文件夾
Pages目錄為默認文檔路徑,這是 Razor Pages項目中的約定,對於 /Home/Index 這個頁面來說,它對應的是 Pages 文件夾中的 Index.cshtml 這個視圖文件。其中,我們還看到一個 Index.cshtml.cs 的文件,這個文件是用來后端編碼的,類似於我們傳統 Webform 中的 .aspx.cs 文件。
母版頁與啟動頁
_ViewStart.cshtml
_ViewStart.cshtml 是整個項目頁面渲染的啟動視圖,我們可以在此視圖中指定項目的默認視圖母版頁面是哪個。
_Layout.cshtml
_Layout.cshtml 是整個Razor Pages 項目的默認母版頁,如果項目中存在 _Layout.cshtml 這個視圖母版頁,則在頁面沒有特別指定 Layout屬性的情況下,會調用此母版頁。
_ViewImports.cshtml
_ViewImports.cshtml 用於導入項目或者子視圖文件夾中的默認資源,以方便統一維護和管理等。
Razor 語法
Razor 支持 C#,並使用 @ 符號從 HTML 轉換為 C#。 Razor 計算 C# 表達式,並將它們呈現在 HTML 輸出中。當 @ 符號后跟 Razor 保留關鍵字時,它會轉換為 Razor 特定標記。 否則會轉換為純 C#。
數據庫
1、Models文件夾。在彈出菜單中選擇,添加-->類。類名為Hello
using System;
namespace RazorHello.Models
{
public class Hello
{
public int ID { get; set; }
public string Name { get; set; }
}
}
2、Models文件夾中添加HelloContext.cs類,繼承自DbContext,操作方式如上第2點中的圖所示,代碼如下:
using Microsoft.EntityFrameworkCore;
namespace RazorHello.Models
{
public class HelloContext:DbContext
{
public HelloContext(DbContextOptions<HelloContext> options): base(options)
{
}
public DbSet<Hello> Hello { get; set; }
}
}
3、數據庫上下文(DbContext)是在startup.cs文件的configureservices方法中向依賴關系注入容器注冊,代碼如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<Model.TEST>(options =>options.UseSqlServer(Configuration.GetConnectionString("DbContext")));
services.AddMvc();
}
4、ASP.NET Core 配置系統會讀取數據庫連接字符串。 為了進行本地開發,它會從 Appsettings.json 文件獲取數據庫連接字符串,數據庫連接配置如下:
"ConnectionStrings": {
"DbContext": "Server=.\\sqlexpress;Database=CustomDB;Trusted_Connection=True;MultipleActiveResultSets=true"
}
5、保存數據
using Microsoft.AspNetCore.Mvc.RazorPages;
using System;
namespace AppDbContext
{
public class CreateModel : PageModel
{
private readonly AppDbContext _db;
public CreateModel(AppDbContext db)
{
_db = db;
}
[BindProperty]
public Model.Hello model { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_db.Customers.Add(model);
await _db.SaveChangesAsync();
}
}
}