View Part
1. Create.cshtml
@model BookStorage.Models.Book @{ ViewData["Title"] = "Add Book"; } <h2>Add Book</h2> <form asp-action="Create" method="post"> <div class="form-group"> <label asp-for="Title"></label> <input asp-for="Title" class="form-control" /> <span asp-validation-for="Title" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Author"></label> <input asp-for="Author" class="form-control" /> <span asp-validation-for="Author" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="YearPublished"></label> <input asp-for="YearPublished" class="form-control" /> <span asp-validation-for="YearPublished" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Price"></label> <input asp-for="Price" class="form-control" /> <span asp-validation-for="Price" class="text-danger"></span> </div> <button type="submit" class="btn btn-success">Save</button> </form>
2. Edit.cshtml
@model BookStorage.Models.Book @{ ViewData["Title"] = "Edit Book"; } <h2>Edit Book</h2> <form asp-action="Edit" method="post"> <input type="hidden" asp-for="BookId" /> <div class="form-group"> <label asp-for="Title"></label> <input asp-for="Title" class="form-control" /> <span asp-validation-for="Title" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Author"></label> <input asp-for="Author" class="form-control" /> <span asp-validation-for="Author" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="YearPublished"></label> <input asp-for="YearPublished" class="form-control" /> <span asp-validation-for="YearPublished" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Price"></label> <input asp-for="Price" class="form-control" /> <span asp-validation-for="Price" class="text-danger"></span> </div> <button type="submit" class="btn btn-primary">Update</button> <a asp-action="Index" class="btn btn-secondary">Cancel</a> </form> @section Scripts { @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } }
3. Index.cshtml
@model IEnumerable<BookStorage.Models.Book> @{ ViewData["Title"] = "Book List"; } @if(TempData["SuccessMessage"] != null) { <div class="alert alert-success alert-dismissible fade show" role="alert"> @TempData["SuccessMessage"] <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> </div> } <h1>@ViewData["Title"]</h1> <p> <a asp-action="Create" class="btn btn-primary">Add New Book</a> </p> <table class="table table-bordered"> <thead> <tr> <th>Title</th> <th>Author</th> <th>Published Year</th> <th>Price</th> <th></th> </tr> </thead> <tbody> @foreach (Book book in Model) { <tr> <td>@book.Title</td> <td>@book.Author</td> <td>@book.YearPublished</td> <td>@book.Price</td> <td> <a asp-action="Edit" asp-route-id="@book.BookId" class="btn btn-warning">Edit</a> | <a asp-action="Details" asp-route-id="@book.BookId" class="btn btn-info">Details</a> | <a asp-action="Delete" asp-route-id="@book.BookId" class="btn btn-danger">Delete</a> </td> </tr> } </tbody> </table>
Controller
1. BookController.cs
using BookStorage.Data; using BookStorage.Models; using Microsoft.AspNetCore.Mvc; namespace BookStorage.Controllers { public class BookController : Controller { private readonly AppDbContext _context; public BookController(AppDbContext context) { _context = context; } [HttpGet] [Route("books")] public IActionResult Index() { return View(_context.Books.ToList()); } [HttpGet] public IActionResult Create() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public IActionResult Create(Book book) { if (ModelState.IsValid) { book.BookId = Guid.NewGuid(); _context.Books.Add(book); _context.SaveChanges(); TempData["SuccessMessage"] = "Book created successfully!"; return RedirectToAction(nameof(Index)); } return View(book); } [HttpGet] public IActionResult Edit(Guid id) { var book = _context.Books.Find(id); if (book == null) return NotFound(); return View(book); } [HttpPost] [ValidateAntiForgeryToken] public IActionResult Edit(Guid id, Book book) { if (id != book.BookId) return NotFound(); if (ModelState.IsValid) { _context.Update(book); _context.SaveChanges(); return RedirectToAction(nameof(Index)); } return View(book); } public IActionResult Delete(Guid id) { var book = _context.Books.Find(id); if (book == null) return NotFound(); return View(book); } [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public IActionResult DeleteConfirmed(Guid id) { var book = _context.Books.Find(id); if (book != null) { _context.Books.Remove(book); _context.SaveChanges(); } return RedirectToAction(nameof(Index)); } public IActionResult Details(Guid id) { var book = _context.Books.Find(id); if (book == null) return NotFound(); return View(book); } } }
Program.cs
using BookStorage.Data; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'BookStorageContext' not found."))); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
AppDbContext.cs
using BookStorage.Models; using Microsoft.EntityFrameworkCore; namespace BookStorage.Data { public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<Book> Books { get; set; } } }
Angular Code- https://chatgpt.com/s/t_68c1e70776f88191a1eadd9fe7191f1a
No comments:
Post a Comment