Scaffolding Template on Asp.Net Core Razor Page
2017-09-29 16:57
786 查看
我们知道在Asp.Net MVC中,如果你使用的EF的DBContext的话,你可以在vs中通过右键解决方案-添加控制器-添加包含视图的控制器,然后vs会根据你选择的Model自动生成相应的CURD的控制器和View,非常便利,这种就叫做 ASP.NET Scaffolding Template,之前雪燕大大有过一篇介绍,有兴趣可以看看【传送门】
大家知道近期Asp.Net Core2.0发布了,微软也推出了Razor
Page来作为默认的Asp.Net Core Web项目,但一开始并没有提供Scaffolding Template(后简称ST)功能,使我们每次对于一个Model需要进行4-5个页面和PageModel的编写,代码量比Asp.Net MVC多了不少,好在ST及时出现,不过这次并没有结合到VS中,我们需要通过添加一个生成包及CMD命令来完成,虽然复杂了点,但至少编码量少了,Let’s do it!
[这里一定要做下迁移,否则生成代码会不成功,我估计生成代码会去读取数据库]
先移步到项目目录(Program.cs和Startup.cs这个目录)
我的是:E:\project\aspnet\Demos\WebApplication4\WebApplication4
然后输入以下命令:
ok,如果顺利你就能看到如下提示:
我们可以看到它自动创建了相应的View和PageModel。
虽然没有MVC那么便利,但至少也节约了我们不少时间。
我们看下Create.cshtml.cs代码,其中一段:
可以看到 它使用了Blog作为实体类的集合名了,但在Step 3中,我使用的是Blogs,这应该是个bug,想提交的,但没有找到相应的项目。
大家知道近期Asp.Net Core2.0发布了,微软也推出了Razor
Page来作为默认的Asp.Net Core Web项目,但一开始并没有提供Scaffolding Template(后简称ST)功能,使我们每次对于一个Model需要进行4-5个页面和PageModel的编写,代码量比Asp.Net MVC多了不少,好在ST及时出现,不过这次并没有结合到VS中,我们需要通过添加一个生成包及CMD命令来完成,虽然复杂了点,但至少编码量少了,Let’s do it!
Hello Scaffolding Razor Page
Step 1 : 创建Razor Page
项目
Step 2 : 创建一个Model,在这里我们创建一个Blog实体类:
public class Blog { public int BlogId { get; set; } public string Title { get; set; } public string Author { get; set; } public DateTime CreatedDate { get; set; } }
Step 3 : 创建DbContext:
public class BlogDbContext : DbContext { public BlogDbContext(DbContextOptions<BlogDbContext> options) : base(options) { } public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>().ToTable("Blog"); } }
Step 4 : 配置连接字符串并把这个DbContext通过DI的方式注册到项目容器中
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<BlogDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("BlogDbContext"))); services.AddMvc(); }
记得在配置文件(appsettings.json)中加入connectString:
{ "ConnectionStrings": { "MovieContext": "Server=(localdb)\\mssqllocaldb;Database=DemoDb;Trusted_Connection=True;MultipleActiveResultSets=true" } }
Step 5 : 安装CodeGeneration package,工具-Nuget包管理器-程序包管理控制台
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 2.0.0
Step 6 : 添加数据迁移-更新到数据库:
Add-Migration Initial Update-Database
[这里一定要做下迁移,否则生成代码会不成功,我估计生成代码会去读取数据库]
Step 7 : 打开终端(CMD or Powershell)
先移步到项目目录(Program.cs和Startup.cs这个目录)我的是:E:\project\aspnet\Demos\WebApplication4\WebApplication4
然后输入以下命令:
dotnet aspnet-codegenerator razorpage -m Blog -dc BlogDbContext -udl -outDir Pages\Blogs –referenceScriptLibraries
ok,如果顺利你就能看到如下提示:
我们可以看到它自动创建了相应的View和PageModel。
虽然没有MVC那么便利,但至少也节约了我们不少时间。
Issues
自动生成的DbContext的DbSet名字不正确
我们看下Create.cshtml.cs代码,其中一段:public async Task<IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return Page(); } _context.Blog.Add(Blog); await _context.SaveChangesAsync(); return RedirectToPage("./Index"); }
可以看到 它使用了Blog作为实体类的集合名了,但在Step 3中,我使用的是Blogs,这应该是个bug,想提交的,但没有找到相应的项目。
相关文章推荐
- Scaffolding Template on Asp.Net Core Razor Page
- Asp.net core 学习笔记 ( Smtp and Razor template 电子邮件和 Razor 模板 )
- Do You Kown Asp.Net Core - 根据实体类自动创建Razor Page CURD页面模板
- 在ASP.NET Core使用Middleware模拟Custom Error Page功能
- A frame in a frameset may become blank on an ASP page or in an ASP.NET application(frameset 可能变成空白)
- ASP.NET MVC3 Razor引擎中RenderBody,RenderPage和RenderSection总结
- 学习ASP.NET Core Razor 编程系列七——修改列表页面
- ASP.NET Core 中的SEO优化(2):中间件中渲染Razor视图
- asp.net mvc 解决漏洞扫描的Error messages on page
- ASP.NET Core - Razor 页面介绍
- ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考
- 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验
- ASP.NET Core Razor页面 vs MVC
- asp.net core设置默认起始页Default Page和重定向
- ASP.NET Page执行顺序如:OnPreInit()、OnInit()……
- ASP.Net Core Razor 页面路由
- ASP.NET Core 2.0 in Docker on Windows Containers
- Running ASP.NET Core applications on Windows Subsystem for Linux
- 学习ASP.NET Core Razor 编程系列一
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”