spam
Decapat
- Katılım
- 3 Mayıs 2023
- Mesajlar
- 383
- Çözümler
- 3
Daha fazla
- Cinsiyet
- Erkek
Asp Dotnet MVC ile bir kütüphane sitesi yapıyorum ve AddBookPage.cshtml de girdiğim kaçıncı sayfa sayısı ve içeriğe göre BookDetailste kitabın içeriğini göstersin istiyorum fakat AddBookPage methodu çalışmıyor ve nedenini anlamıyorum. Güncel kodlar;
HomeController.cs
AppDbContext.cs
BookModel.cs
BookPageModel.cs
BookDetails.cshtml
AddBookPage.cshtml
HomeController.cs
C#:
public IActionResult BookDetails(int id)
{
var book = _context.Kitaplar
.Include(b => b.Category)
.Include(b => b.Pages)
.FirstOrDefault(b => b.Id == id);
if (book == null)
return NotFound();
return View(book);
}
[HttpGet]
public IActionResult AddBookPage(int bookId)
{
var page = new BookPageModel
{
BookModelId = bookId
};
return View(page);
}
[HttpPost]
public IActionResult AddBookPage(BookPageModel page)
{
if (!ModelState.IsValid)
{
return View(page);
}
if (page.BookModelId == 0)
{
ModelState.AddModelError("", "Kitap ID bulunamadı.");
return View(page);
}
_context.BookPages.Add(page);
_context.SaveChanges();
return RedirectToAction("BookDetails", new { id = page.BookModelId });
}
AppDbContext.cs
C#:
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<UserModel> Kullanicilar { get; set; }
public DbSet<BookPageModel> BookPages { get; set; }
public DbSet<BookModel> Kitaplar { get; set; }
public DbSet<CategoryModel> Kategoriler { get; set; }
public DbSet<UserBookProgressModel> Kitapİlerlemesi { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<BookModel>()
.HasMany(b => b.KitapSayfasi)
.WithOne(p => p.BookModel)
.HasForeignKey(p => p.BookModelId);
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<CategoryModel>()
.HasKey(c => c.Id);
modelBuilder.Entity<CategoryModel>()
.HasMany(c => c.SubCategories)
.WithOne(c => c.ParentCategory)
.HasForeignKey(c => c.ParentCategoryId);
base.OnModelCreating(modelBuilder);
}
BookModel.cs
C#:
public class BookModel
{
public int Id { get; set; }
public string Title { get; set; } = "";
public string Author { get; set; } = "";
public int CategoryId { get; set; }
public CategoryModel? Category { get; set; }
public int PageCount { get; set; }
public int CreatedByUserId { get; set; }
public UserModel? CreatedByUser { get; set; }
public byte[]? CoverImage { get; set; }
public ICollection<BookPageModel> Pages { get; set; } = new List<BookPageModel>();
}
BookPageModel.cs
C#:
public class BookPageModel
{
public int Id { get; set; }
public int BookModelId { get; set; }
public BookModel? BookModel { get; set; }
public int PageNumber { get; set; }
public string Content { get; set; } = string.Empty;
}
}
BookDetails.cshtml
HTML:
@model kutuphane.Models.BookModel
<h2>@Model.Title</h2>
<p>Yazar: @Model.Author</p>
<p>Kategori: @Model.Category?.Name</p>
<p>Sayfa Sayısı: @Model.PageCount</p>
<h3>Kitap İçeriği</h3>
@if (Model.Pages != null && Model.Pages.Any())
{
<ul>
@foreach(var sayfa in Model.Pages.OrderBy(p => p.PageNumber))
{
<li><strong>Sayfa @sayfa.PageNumber:</strong> @sayfa.Content</li>
}
</ul>
}
else
{
<p>Kitap içeriği bulunamadı.</p>
}
<a asp-controller="Home" asp-action="AddBookPage" asp-route-bookId="@Model.Id">Sayfa Ekle</a>
AddBookPage.cshtml
HTML:
@model kutuphane.Models.BookPageModel
<h2>Sayfa Ekle</h2>
<form asp-action="AddBookPage" method="post">
<input type="hidden" asp-for="BookModelId" />
<label for="PageNumber">Sayfa Numarası</label>
<input asp-for="PageNumber" id="PageNumber" />
<label for="Content">İçerik</label>
<textarea asp-for="Content" id="Content"></textarea>
<button type="submit">Kaydet</button>
</form>
Son düzenleme: