Раскрывающийся список ASP.NET Razor Pages из БД - PullRequest
0 голосов
/ 27 мая 2019

Я пишу приложение на ASP.NET Razor Pages (это моя домашняя работа).Тема этого приложения - «Библиотека», которую я добавляю, удаляю, модифицирую и т. Д. Я пытаюсь сделать это.Когда я добавляю новую книгу, когда это жанр книги, я хочу использовать выпадающий список из базы данных.Я искал это, но я не нашел рабочего решения для меня.

Итак, мой класс Книги: Book.cs

public class Book
{
    [Key]
    public int Id { get; set; }

    [Required]
    [Display(Name = "Tytuł")]

    public string Title { get; set; }
    [Required]
    [Display(Name = "Autor")]
    public string Author { get; set; }
    [Required]
    [Display(Name = "Gatunek")]
    public string Genre { get; set; }
    [Required]
    [Display(Name = "Rok Wydania")]
    public int ReleaseYear { get; set; }
    [Required]
    [Display(Name = "Okładka")]
    public string Cover { get; set; }
    [Required]
    [Display(Name = "Liczba Stron")]
    public int NumberOfPages { get; set; }
    [Required]
    [Display(Name = "Opis")]
    public string Description { get; set; }
}

Далее у меня есть класс Жанра

Genre.cs

[Key]
    public int Id { get; set; }

    [Required]
    [Display(Name = "Gatunek")]
    public string Name { get; set; }

Я добавляю это в мой ApplicationDbContext

ApplicationDbContext.cs

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {

    }

    public DbSet<Book> Book { get; set; }
    public DbSet<Genre> Genre { get; set; }

AddBook.cshtml.cs

[Authorize(Roles = SD.AdminEndUser)]
public class AddBookModel : PageModel
{
    private readonly ApplicationDbContext _db;

    [BindProperty]
    public Book Book { get; set; }

    public AddBookModel(ApplicationDbContext db)
    {
        _db = db;
    }

    public IActionResult OnGet()
    {
        return Page();
    }

    public async Task <IActionResult> OnPostAsync(ServiceType ServiceType)
    {
        if(!ModelState.IsValid)
        {
            return Page();
        }

        _db.Book.Add(Book);
        await _db.SaveChangesAsync();

        return RedirectToPage("Index");

    }

И AddBook.cs

<form method="post">
<div class="border backgroundWhite">
    <div class="form-group row">
        <div class="col-2">
            <label asp-for="Book.Title"></label>
        </div>
        <div class="col-5">
            <input asp-for="Book.Title" class="form-control" />
        </div>
        <span asp-validation-for="Book.Title" class="text-danger"></span>
    </div>
    <div class="form-group row">
        <div class="col-2">
            <label asp-for="Book.Author"></label>
        </div>
        <div class="col-5">
            <input asp-for="Book.Author" class="form-control" />
        </div>
        <span asp-validation-for="Book.Author" class="text-danger"></span>
    </div>
    <div class="form-group row">
        <div class="col-2">
            <label asp-for="Book.Genre"></label>
        </div>
        <div class="col-5">
            <input asp-for="Book.Genre" class="form-control" />
        </div>
        <span asp-validation-for="Book.Genre" class="text-danger"></span>
    </div>
    <div class="form-group row">
        <div class="col-2">
            <label asp-for="Book.ReleaseYear"></label>
        </div>
        <div class="col-5">
            <input asp-for="Book.ReleaseYear" class="form-control" />
        </div>
        <span asp-validation-for="Book.ReleaseYear" class="text-danger"></span>
    </div>
    <div class="form-group row">
        <div class="col-2">
            <label asp-for="Book.NumberOfPages"></label>
        </div>
        <div class="col-5">
            <input asp-for="Book.NumberOfPages" class="form-control" />
        </div>
        <span asp-validation-for="Book.NumberOfPages" class="text-danger"></span>
    </div>
    <div class="form-group row">
        <div class="col-2">
            <label asp-for="Book.Cover"></label>
        </div>
        <div class="col-5">
            <input asp-for="Book.Cover" class="form-control" />
        </div>
        <span asp-validation-for="Book.Cover" class="text-danger"></span>
    </div>
    <div class="form-group row">
        <div class="col-2">
            <label asp-for="Book.Description"></label>
        </div>
        <div class="col-5">
            <input asp-for="Book.Description" class="form-control" />
        </div>
        <span asp-validation-for="Book.Description" class="text-danger"></span>
    </div>
    <div class="form-group row">
        <div class="col-5 offset-2">
           <partial name="_AddAndBackToListButton" />
        </div>
    </div>
</div>

У меня есть рабочее соединение с Db.Я просто не знаю, что мне делать дальше, чтобы сделать выпадающий список.Меня не интересует решение с контроллерами!

Есть идеи?

Спасибо за помощь!

1 Ответ

0 голосов
/ 27 мая 2019

Это возможное повторение:

Но все равно я постараюсь ответить:

  • Если вы пишете это в синтаксисе Razor, вы можете просто использовать то же решение, что и по ссылке выше. Создайте HtmlDropdownFor, и в качестве аргумента выполните запрос LINQ для вашего List<Genre> (список жанров или словарь жанров, какой бы итеративный вам ни понадобился)
  • В противном случае вы можете просто вручную написать ввод <select></select> внутри каждой HTML-формы, которая этого требует. Очевидно, что это занимает больше времени, но вы можете найти больше информации о том, как это сделать, в w3 школах: элементы HTML-формы , в частности, раздел о <select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...