Remove Movie feature and drop Movie table via migration
This commit is contained in:
@@ -4,7 +4,6 @@ namespace RazorPagesMovie.Data;
|
||||
|
||||
public class RazorPagesMovieContext(DbContextOptions<RazorPagesMovieContext> options) : DbContext(options)
|
||||
{
|
||||
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
|
||||
public DbSet<RazorPagesMovie.Models.AdminUser> AdminUser { get; set; } = default!;
|
||||
public DbSet<RazorPagesMovie.Models.ContactMessage> ContactMessage { get; set; } = default!;
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using RazorPagesMovie.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace RazorPagesMovie.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
[Migration("20260826122916_DropMovieTable")]
|
||||
partial class DropMovieTable
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("RazorPagesMovie.Models.AdminUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("PasswordHash")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Username")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("AdminUser");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RazorPagesMovie.Models.ContactMessage", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("nvarchar(200)");
|
||||
|
||||
b.Property<string>("Message")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5000)
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<bool>("NotificationSent")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<string>("Phone")
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<DateTime>("SentAt")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Subject")
|
||||
.IsRequired()
|
||||
.HasMaxLength(150)
|
||||
.HasColumnType("nvarchar(150)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("ContactMessage");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace RazorPagesMovie.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class DropMovieTable : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "Movie");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Movie",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Genre = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false),
|
||||
Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
|
||||
Rating = table.Column<string>(type: "nvarchar(5)", maxLength: 5, nullable: false),
|
||||
ReleaseDate = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||
Title = table.Column<string>(type: "nvarchar(60)", maxLength: 60, nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Movie", x => x.Id);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -82,40 +82,6 @@ namespace RazorPagesMovie.Migrations
|
||||
|
||||
b.ToTable("ContactMessage");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RazorPagesMovie.Models.Movie", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.IsRequired()
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<decimal>("Price")
|
||||
.HasColumnType("decimal(18, 2)");
|
||||
|
||||
b.Property<string>("Rating")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5)
|
||||
.HasColumnType("nvarchar(5)");
|
||||
|
||||
b.Property<DateTime>("ReleaseDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.IsRequired()
|
||||
.HasMaxLength(60)
|
||||
.HasColumnType("nvarchar(60)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Movie");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace RazorPagesMovie.Models;
|
||||
|
||||
public class Movie
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[StringLength(60, MinimumLength = 3)]
|
||||
[Required]
|
||||
public string Title { get; set; } = string.Empty;
|
||||
|
||||
[Display(Name = "Release Date")]
|
||||
[DataType(DataType.Date)]
|
||||
public DateTime ReleaseDate { get; set; }
|
||||
|
||||
[Range(1, 100)]
|
||||
[DataType(DataType.Currency)]
|
||||
[Column(TypeName = "decimal(18, 2)")]
|
||||
public decimal Price { get; set; }
|
||||
|
||||
[RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$")]
|
||||
[Required]
|
||||
[StringLength(30)]
|
||||
public string Genre { get; set; } = string.Empty;
|
||||
|
||||
[RegularExpression(@"^[A-Z]+[a-zA-Z0-9""'\s-]*$")]
|
||||
[StringLength(5)]
|
||||
[Required]
|
||||
public string Rating { get; set; } = string.Empty;
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
@page
|
||||
@model RazorPagesMovie.Pages.MoviePages.CreateModel
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Create";
|
||||
}
|
||||
|
||||
<h1>Create</h1>
|
||||
|
||||
<h4>Movie</h4>
|
||||
<hr />
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<form method="post">
|
||||
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.Title" class="control-label"></label>
|
||||
<input asp-for="Movie.Title" class="form-control" />
|
||||
<span asp-validation-for="Movie.Title" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.ReleaseDate" class="control-label"></label>
|
||||
<input asp-for="Movie.ReleaseDate" class="form-control" />
|
||||
<span asp-validation-for="Movie.ReleaseDate" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.Genre" class="control-label"></label>
|
||||
<input asp-for="Movie.Genre" class="form-control" />
|
||||
<span asp-validation-for="Movie.Genre" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.Price" class="control-label"></label>
|
||||
<input asp-for="Movie.Price" class="form-control" />
|
||||
<span asp-validation-for="Movie.Price" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.Rating" class="control-label"></label>
|
||||
<input asp-for="Movie.Rating" class="form-control" />
|
||||
<span asp-validation-for="Movie.Rating" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="submit" value="Create" class="btn btn-primary" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a asp-page="./Index">Back to List</a>
|
||||
</div>
|
||||
|
||||
@section Scripts {
|
||||
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RazorPagesMovie.Data;
|
||||
using RazorPagesMovie.Models;
|
||||
|
||||
namespace RazorPagesMovie.Pages.MoviePages;
|
||||
|
||||
public class CreateModel : PageModel
|
||||
{
|
||||
private readonly RazorPagesMovieContext _context;
|
||||
|
||||
public CreateModel(RazorPagesMovieContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public IActionResult OnGet()
|
||||
{
|
||||
return Page();
|
||||
}
|
||||
|
||||
[BindProperty]
|
||||
public Movie Movie { get; set; } = default!;
|
||||
|
||||
// To protect from overposting attacks, see https://aka.ms/RazorPagesCRUD.
|
||||
public async Task<IActionResult> OnPostAsync()
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
{
|
||||
return Page();
|
||||
}
|
||||
|
||||
_context.Movie.Add(Movie);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
return RedirectToPage("./Index");
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
@page "{id:int}"
|
||||
@model RazorPagesMovie.Pages.MoviePages.DeleteModel
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Delete";
|
||||
}
|
||||
|
||||
<h1>Delete</h1>
|
||||
|
||||
<h3>Are you sure you want to delete this?</h3>
|
||||
<div>
|
||||
<h4>RazorPagesMovie.Models.Movie</h4>
|
||||
<hr />
|
||||
<dl class="row">
|
||||
<dt class = "col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.Title)
|
||||
</dt>
|
||||
<dd class = "col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.Title)
|
||||
</dd>
|
||||
<dt class = "col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.ReleaseDate)
|
||||
</dt>
|
||||
<dd class = "col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.ReleaseDate)
|
||||
</dd>
|
||||
<dt class = "col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.Genre)
|
||||
</dt>
|
||||
<dd class = "col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.Genre)
|
||||
</dd>
|
||||
<dt class = "col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.Price)
|
||||
</dt>
|
||||
<dd class = "col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.Price)
|
||||
</dd>
|
||||
<dt class="col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.Rating)
|
||||
</dt>
|
||||
<dd class="col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.Rating)
|
||||
</dd>
|
||||
</dl>
|
||||
<form method="post">
|
||||
<input type="hidden" asp-for="Movie.Id" />
|
||||
<input type="submit" value="Delete" class="btn btn-danger" /> |
|
||||
<a asp-page="./Index">Back to List</a>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,58 +0,0 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RazorPagesMovie.Data;
|
||||
using RazorPagesMovie.Models;
|
||||
|
||||
namespace RazorPagesMovie.Pages.MoviePages;
|
||||
|
||||
public class DeleteModel : PageModel
|
||||
{
|
||||
private readonly RazorPagesMovieContext _context;
|
||||
|
||||
public DeleteModel(RazorPagesMovieContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
[BindProperty]
|
||||
public Movie Movie { get; set; } = default!;
|
||||
|
||||
public async Task<IActionResult> OnGetAsync(int? id)
|
||||
{
|
||||
if (id is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var movie = await _context.Movie.FirstOrDefaultAsync(m => m.Id == id);
|
||||
if (movie is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
else
|
||||
{
|
||||
Movie = movie;
|
||||
}
|
||||
|
||||
return Page();
|
||||
}
|
||||
|
||||
public async Task<IActionResult> OnPostAsync(int? id)
|
||||
{
|
||||
if (id is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var movie = await _context.Movie.FindAsync(id);
|
||||
if (movie != null)
|
||||
{
|
||||
Movie = movie;
|
||||
_context.Movie.Remove(Movie);
|
||||
await _context.SaveChangesAsync();
|
||||
}
|
||||
|
||||
return RedirectToPage("./Index");
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
@page "{id:int}"
|
||||
@model RazorPagesMovie.Pages.MoviePages.DetailsModel
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Details";
|
||||
}
|
||||
|
||||
<h1>Details</h1>
|
||||
|
||||
<div>
|
||||
<h4>Movie</h4>
|
||||
<hr />
|
||||
<dl class="row">
|
||||
<dt class = "col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.Title)
|
||||
</dt>
|
||||
<dd class = "col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.Title)
|
||||
</dd>
|
||||
<dt class = "col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.ReleaseDate)
|
||||
</dt>
|
||||
<dd class = "col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.ReleaseDate)
|
||||
</dd>
|
||||
<dt class = "col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.Genre)
|
||||
</dt>
|
||||
<dd class = "col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.Genre)
|
||||
</dd>
|
||||
<dt class = "col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.Price)
|
||||
</dt>
|
||||
<dd class = "col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.Price)
|
||||
</dd>
|
||||
<dt class="col-sm-2">
|
||||
@Html.DisplayNameFor(model => model.Movie.Rating)
|
||||
</dt>
|
||||
<dd class="col-sm-10">
|
||||
@Html.DisplayFor(model => model.Movie.Rating)
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div>
|
||||
<a asp-page="./Edit" asp-route-id="@Model.Movie.Id">Edit</a> |
|
||||
<a asp-page="./Index">Back to List</a>
|
||||
</div>
|
||||
@@ -1,38 +0,0 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RazorPagesMovie.Data;
|
||||
using RazorPagesMovie.Models;
|
||||
|
||||
namespace RazorPagesMovie.Pages.MoviePages;
|
||||
|
||||
public class DetailsModel : PageModel
|
||||
{
|
||||
private readonly RazorPagesMovieContext _context;
|
||||
public DetailsModel(RazorPagesMovieContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public Movie Movie { get; set; } = default!;
|
||||
|
||||
public async Task<IActionResult> OnGetAsync(int? id)
|
||||
{
|
||||
if (id is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var movie = await _context.Movie.FirstOrDefaultAsync(m => m.Id == id);
|
||||
if (movie is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
else
|
||||
{
|
||||
Movie = movie;
|
||||
}
|
||||
|
||||
return Page();
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
@page "{id:int}"
|
||||
@model RazorPagesMovie.Pages.MoviePages.EditModel
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Edit";
|
||||
}
|
||||
|
||||
<h1>Edit</h1>
|
||||
|
||||
<h4>Movie</h4>
|
||||
<hr />
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<form method="post">
|
||||
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||
<input type="hidden" asp-for="Movie.Id" />
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.Title" class="control-label"></label>
|
||||
<input asp-for="Movie.Title" class="form-control" />
|
||||
<span asp-validation-for="Movie.Title" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.ReleaseDate" class="control-label"></label>
|
||||
<input asp-for="Movie.ReleaseDate" class="form-control" />
|
||||
<span asp-validation-for="Movie.ReleaseDate" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.Genre" class="control-label"></label>
|
||||
<input asp-for="Movie.Genre" class="form-control" />
|
||||
<span asp-validation-for="Movie.Genre" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.Price" class="control-label"></label>
|
||||
<input asp-for="Movie.Price" class="form-control" />
|
||||
<span asp-validation-for="Movie.Price" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Movie.Rating" class="control-label"></label>
|
||||
<input asp-for="Movie.Rating" class="form-control" />
|
||||
<span asp-validation-for="Movie.Rating" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="submit" value="Save" class="btn btn-primary" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a asp-page="./Index">Back to List</a>
|
||||
</div>
|
||||
|
||||
@section Scripts {
|
||||
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RazorPagesMovie.Data;
|
||||
using RazorPagesMovie.Models;
|
||||
|
||||
namespace RazorPagesMovie.Pages.MoviePages;
|
||||
|
||||
public class EditModel : PageModel
|
||||
{
|
||||
private readonly RazorPagesMovieContext _context;
|
||||
|
||||
public EditModel(RazorPagesMovieContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
[BindProperty]
|
||||
public Movie Movie { get; set; } = default!;
|
||||
|
||||
public async Task<IActionResult> OnGetAsync(int? id)
|
||||
{
|
||||
if (id is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var movie = await _context.Movie.FirstOrDefaultAsync(m => m.Id == id);
|
||||
if (movie is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
Movie = movie;
|
||||
return Page();
|
||||
}
|
||||
|
||||
// To protect from overposting attacks, enable the specific properties you want to bind to.
|
||||
// For more details, see https://aka.ms/RazorPagesCRUD.
|
||||
public async Task<IActionResult> OnPostAsync()
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
{
|
||||
return Page();
|
||||
}
|
||||
|
||||
_context.Attach(Movie).State = EntityState.Modified;
|
||||
|
||||
try
|
||||
{
|
||||
await _context.SaveChangesAsync();
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
if (!MovieExists(Movie.Id))
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
return RedirectToPage("./Index");
|
||||
}
|
||||
|
||||
private bool MovieExists(int id)
|
||||
{
|
||||
return _context.Movie.Any(e => e.Id == id);
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
@page
|
||||
@model RazorPagesMovie.Pages.MoviePages.IndexModel
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Index";
|
||||
}
|
||||
|
||||
<h1>Index</h1>
|
||||
|
||||
<p>
|
||||
<a asp-page="Create">Create New</a>
|
||||
</p>
|
||||
<form>
|
||||
<p>
|
||||
<select asp-for="MovieGenre" asp-items="Model.Genres">
|
||||
<option value="">All</option>
|
||||
</select>
|
||||
<label>Title: <input type="text" asp-for="SearchString" /></label>
|
||||
<input type="submit" value="Filter" />
|
||||
</p>
|
||||
</form>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.Movie[0].Title)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.Movie[0].ReleaseDate)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.Movie[0].Genre)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.Movie[0].Price)
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var item in Model.Movie) {
|
||||
<tr>
|
||||
<td>
|
||||
@Html.DisplayFor(model => item.Title)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(model => item.ReleaseDate)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(model => item.Genre)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(model => item.Price)
|
||||
</td>
|
||||
<td>
|
||||
<a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> |
|
||||
<a asp-page="./Details" asp-route-id="@item.Id">Details</a> |
|
||||
<a asp-page="./Delete" asp-route-id="@item.Id">Delete</a>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1,49 +0,0 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RazorPagesMovie.Models;
|
||||
|
||||
namespace RazorPagesMovie.Pages.MoviePages;
|
||||
|
||||
public class IndexModel : PageModel
|
||||
{
|
||||
private readonly RazorPagesMovie.Data.RazorPagesMovieContext _context;
|
||||
|
||||
public IndexModel(RazorPagesMovie.Data.RazorPagesMovieContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public IList<Movie> Movie { get; set; } = default!;
|
||||
|
||||
[BindProperty(SupportsGet = true)]
|
||||
public string? SearchString { get; set; }
|
||||
|
||||
public SelectList? Genres { get; set; }
|
||||
|
||||
[BindProperty(SupportsGet = true)]
|
||||
public string? MovieGenre { get; set; }
|
||||
|
||||
public async Task OnGetAsync()
|
||||
{
|
||||
IQueryable<string> genreQuery = from m in _context.Movie
|
||||
orderby m.Genre
|
||||
select m.Genre;
|
||||
|
||||
var movies = from m in _context.Movie select m;
|
||||
|
||||
if (!string.IsNullOrEmpty(SearchString))
|
||||
{
|
||||
movies = movies.Where(s => s.Title.Contains(SearchString));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(MovieGenre))
|
||||
{
|
||||
movies = movies.Where(x => x.Genre == MovieGenre);
|
||||
}
|
||||
|
||||
Genres = new SelectList(await genreQuery.Distinct().ToListAsync());
|
||||
Movie = await movies.ToListAsync();
|
||||
}
|
||||
}
|
||||
@@ -12,22 +12,11 @@ public static class SeedData
|
||||
using (var context = new RazorPagesMovieContext(
|
||||
serviceProvider.GetRequiredService<DbContextOptions<RazorPagesMovieContext>>()))
|
||||
{
|
||||
if (context == null || context.Movie == null)
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException("Null RazorPagesMovieContext");
|
||||
}
|
||||
|
||||
if (!context.Movie.Any())
|
||||
{
|
||||
context.Movie.AddRange(
|
||||
new Movie { Title = "When Harry Met Sally", ReleaseDate = DateTime.Parse("1989-2-12"), Genre = "Romantic Comedy", Price = 7.99M, Rating = "R" },
|
||||
new Movie { Title = "Ghostbusters", ReleaseDate = DateTime.Parse("1984-3-13"), Genre = "Comedy", Price = 8.99M, Rating = "G" },
|
||||
new Movie { Title = "Ghostbusters 2", ReleaseDate = DateTime.Parse("1986-2-23"), Genre = "Comedy", Price = 9.99M, Rating = "G" },
|
||||
new Movie { Title = "Rio Bravo", ReleaseDate = DateTime.Parse("1959-4-15"), Genre = "Western", Price = 3.99M, Rating = "NR" }
|
||||
);
|
||||
context.SaveChanges();
|
||||
}
|
||||
|
||||
if (!context.AdminUser.Any())
|
||||
{
|
||||
var accounts = serviceProvider.GetRequiredService<IConfiguration>()
|
||||
|
||||
Reference in New Issue
Block a user