美文网首页
2018-08-03

2018-08-03

作者: 别沉默_738a | 来源:发表于2018-08-03 08:58 被阅读0次

    使用ASP.NET Core创建Razor页面Web应用

    系统必备

    1. .NET Core 2.1 SDK或更高版本

    2. 具有以下工作负载的Visual Studio 2017 15.7.3版或更高版本:

    ASP.NET 和 Web开发

    .NET Core 跨平台开发

    创建Razor Web应用

    文件>新建>项目

    image

    选择“ASP.NET Core 2.1”

    image image

    项目文件和文件夹

    文件或文件夹 目标


    wwwroot 包含静态
    Pages Razor Pages的文件夹
    oppsetttings.json 配置
    Program.cs 配置 ASP.NET Core 应用的主机
    Startup.cs 配置服务和请求管道

    Pages/Shared 文件夹

    _Layout.cshtml 文件 包含常见的 HTML 元素(脚本和样式表链接),并设置应用的布局
    _ValidationScriptsPartial.cshtml 文件 提供对 jQuery 验证脚本的引用
    _CookieConsentPartial.cshtml 文件 提供了导航栏以及用于汇总隐私和 cookie 使用策略的目录
    _ViewStart.cshtml文件 将 Razor Pages Layout 属性设置为使用 _Layout.cshtml文件
    _ViewImports.cshtml 文件 包含要导入每个 Razor 页面的 Razor 指令

    在 ASP.NET Core 中向 Razor 页面应用添加模型

    在解决方案资源管理器中,右键单击“RazorPagesMovie”项目 >“添加” > “新建文件夹”,将文件夹命名为“Models”。右键单击“Models”文件夹。 选择“添加” >“类”。 将类命名为“Movie”,将 Movie 类的内容替换为以下代码:

    using System;
    usingSystem.ComponentModel.DataAnnotations.Schema;
    namespace RazorPagesMovie.Models{
    
     public class Movie    {
    
        public int ID { get; set; }
    
        public string Title { get; set; }
    
        public DateTime ReleaseDate { get; set; }
    
        public string Genre { get; set; }
    
        public decimal Price { get; set; }
    
      }
    }
    

    搭建模型的基架

    对模型执行创建、读取、更新和删除 (CRUD) 操作。

    创建“Pages/Movies”文件夹:

    • 在解决方案资源管理器中,右键单击“Pages”文件夹 >“添加”>“新建文件夹”。
    • 将文件夹命名为“Movies”

    在解决方案资源管理器中,右键单击“Pages/Movies”文件夹 >“添加”>“新搭建基架的项目”。

    image image image

    Pages/Movies/Index.cshtml.cs 页面模型

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.EntityFrameworkCore;
    using RazorPagesMovie.Models;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    namespace RazorPagesMovie.Pages.Movies
    {
        public class IndexModel : PageModel    
       {
         private readonly RazorPagesMovie.Models.RazorPagesMovieContext _context;
    
         public IndexModel(RazorPagesMovie.Models.RazorPagesMovieContext context)
       {
            _context = context;
        }
    
        public IList Movie { get; set; }
    
        public async Task OnGetAsync()
       {
            Movie = await _context.Movie.ToListAsync();
        }
     }
    }
    

    Razor 页面派生自 PageModel, 按照约定,PageModel 派生的类称为 <PageName>Model, 此构造函数使用依赖关系注入MovieContext 添加到页。所有已搭建基架的页面都遵循此模式。
    OnGet 返回 voidOnGetAsync 返回 Task时,不使用任何返回方法。 当返回类型是 IActionResultTask<IActionResult> 时,必须提供返回语句。 例如,Pages/Movies/Create.cshtml.cs OnPostAsync 方法:

    public async Task<IActionResult> OnPostAsync()
    {
         if (!ModelState.IsValid)
         {
              return Page();
         }
        _context.Movie.Add(Movie);
    
         await _context.SaveChangesAsync();
    
         return RedirectToPage("./Index");
    }
    

    设定数据库种子

    在 Models 文件夹中创建一个名为 SeedData 的新类。 将生成的代码替换为以下代码:

    using Microsoft.EntityFrameworkCore;
    using Microsoft.Extensions.DependencyInjection;
    using System;using System.Linq;
    
    namespace RazorPagesMovie.Models
    { 
       public static class SeedData 
       { 
         public static void Initialize(IServiceProvider serviceProvider) 
         { 
           using (var context = new RazorPagesMovieContext( serviceProvider.GetRequiredService>()))
           {
                // Look for any movies.
                if (context.Movie.Any())
                {
                    return;  // DB has been seeded
                }
                context.Movie.AddRange(new Movie
                {
                        Title = "When Harry Met Sally",
                        ReleaseDate = DateTime.Parse("1989-2-12"),
                        Genre = "Romantic Comedy",
                        Price = 7.99M
                    },
                    new Movie
                    {
                        Title = "Ghostbusters ",
                        ReleaseDate = DateTime.Parse("1984-3-13"),
                        Genre = "Comedy",
                        Price = 8.99M
                    },
                    new Movie
                    {
                        Title = "Ghostbusters 2",
                        ReleaseDate = DateTime.Parse("1986-2-23"),
                        Genre = "Comedy",
                        Price = 9.99M
                    },
                    new Movie
                    {
                        Title = "Rio Bravo",
                        ReleaseDate = DateTime.Parse("1959-4-15"),
                        Genre = "Western",
                        Price = 3.99M
                    }
                  );
                context.SaveChanges();
              }
          }
       }
    }
    

    添加种子初始值设定项

    在 Program.cs 中,修改 Main 方法以执行以下操作:

    从依赖关系注入容器获取数据库上下文实例。

    调用 seed 方法,并将上下文传递给它。

    Seed 方法完成时释放上下文。

    下面的代码显示更新后的 Program.cs 文件:

    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Logging;
    using RazorPagesMovie.Models;
    using System;
    using Microsoft.EntityFrameworkCore;
    
    namespace RazorPagesMovie
    { 
      public class Program 
      { 
        public static void Main(string[] args) 
        { 
          var host = CreateWebHostBuilder(args).Build(); 
          using (var scope =  host.Services.CreateScope())
          { 
             var services = scope.ServiceProvider; 
             try 
             { 
                 var context = services.GetRequiredService();
                context.Database.Migrate(); 
                SeedData.Initialize(services); 
             } 
             catch (Exception ex) 
             { 
                var logger = services.GetRequiredService>();
                logger.LogError(ex, "An error occurred seeding the DB."); 
             } 
            }
            host.Run();
           } 
           public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup();
       }
    }
    

    生产应用不会调用 Database.Migrate。 它会添加到上面的代码中,以防止在未运行 Update-Database 时出现以下异常:
    SqlException:无法打开登录请求的数据库“RazorPagesMovieContext-21”。 登录失败。 用户“用户名”登录失败。

    相关文章

      网友评论

          本文标题:2018-08-03

          本文链接:https://www.haomeiwen.com/subject/qogevftx.html