概述:此教程介绍了生成RazorPagesWeb应用的基础知识。具体分为如下部分
首先,我们启用VS新建一个项目:
本篇主要是学习使用NetCore的Razor视图,因此先从最基本的添加项目开始。添加项目完成后,我们发现系统自动生成了以下各项,如下图:
首先我们对项目各文件的执行顺序作个说明:
其次,一起探讨下各个文件夹/文件的作用:
Pages文件夹
1、模板文件,
2、自定义的Razor页面
wwwroot文件夹
appSettings.json
Program.cs
Startup.cs
1、新建一个数据库,命名为:MovieDB
2、创建一张表,命名为:Movie
脚本如下:
createtableMovie(IDintidentity(1,1)primarykey,Titlenvarchar(200),ReleaseDatedatetime,Genrevarchar(200),Pricedecimal(18,2))ViewCode数据库创建完毕,我们插入一条数据:
insertinto[MovieDB].[dbo].[Movie]values('战狼2',getdate(),'影视媒体',18)ViewCode至此,数据准备完毕,下面我们创建数据库链接字符串,打开appsettings.json文件,编辑如下:
新增链接字符串:
注意上述链接字符串中的RazorPagesMovieContext,这是一个数据访问上下文,用于数据库对象(数据表)构建及数据访问,我们可以通过VS创建,下面会逐步介绍,现在我们需要准备和数据表对应的实体类Movie,如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel.DataAnnotations;usingSystem.ComponentModel.DataAnnotations.Schema;usingSystem.Linq;usingSystem.Threading.Tasks;namespaceRazorPagesMovie2.DataModel{publicclassMovie{publicintID{get;set;}[StringLength(60,MinimumLength=3)][Required]publicstringTitle{get;set;}///
在Pages文件夹中新建文件夹MoviePages,如下:
右键MoviePages文件夹,选择:添加->新搭建基架的项目(F)...,用于创建增删改查页面及生成RazorPagesMovieContext数据库上下文访问类,如下:
需要将默认的:RazorPagesMovie2.Models.RazorPagesMovie2Context修改为:RazorPagesMovie2.Data.RazorPagesMovie2Context,以便生产一个名为Data的文件夹,用于区分Models文件夹。
这是会生产一个Data的文件夹,有一个类,名称为:RazorPagesMovie2Context,也就是上述提到的数据库访问上下文类,用于数据库访问及数据库对象构建。
如下:
代码如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.EntityFrameworkCore;usingRazorPagesMovie2.DataModel;namespaceRazorPagesMovie2.Data{publicclassRazorPagesMovie2Context:DbContext{publicRazorPagesMovie2Context(DbContextOptions
注意:StartUp.cs中的上下文名称应和appsettings.json中的名称一致,如果不一致,会导致找不到链接字符串。
此时,项目基本构建完成,运行如下:
由上图可以,我们根据VS基架模板来生成的增删改查页面对应的.CS文件中有生成相应的增删改查代码,如下:
前端:
@page@modelRazorPagesMovie2.Pages.MoviePages.IndexModel@{ViewData["Title"]="Index";}
Index
publicclassIndexModel:PageModel{privatereadonlyRazorPagesMovie2.Data.RazorPagesMovie2Context_context;publicIndexModel(RazorPagesMovie2.Data.RazorPagesMovie2Contextcontext){_context=context;}publicIList
publicasyncTaskOnGetAsync(){varmovies=frommin_context.Movieselectm;if(!string.IsNullOrEmpty(SearchString)){movies=movies.Where(s=>s.Title.Contains(SearchString));}Movie=awaitmovies.ToListAsync();}ViewCode增加页面代码如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.AspNetCore.Mvc.RazorPages;usingMicrosoft.AspNetCore.Mvc.Rendering;usingRazorPagesMovie2.Data;usingRazorPagesMovie2.DataModel;namespaceRazorPagesMovie2.Pages.MoviePages{publicclassCreateModel:PageModel{privatereadonlyRazorPagesMovie2.Data.RazorPagesMovie2Context_context;publicCreateModel(RazorPagesMovie2.Data.RazorPagesMovie2Contextcontext){_context=context;}publicIActionResultOnGet(){returnPage();}[BindProperty]publicMovieMovie{get;set;}publicasyncTask