Форма определяется в Add.cshtml:MVC.NET Пуансон/Razor: Отправить значение от Выбрать поле DB
@using bendinsnMusicApp.Models
@model Album
<h2>Add Album</h2>
<form action="Add" method="post">
Title: <input type="text" name="Title" value="" autofocus />
<span asp-validation-for="Title" class="text-danger"></span><br />
Price: <input type="number" name="Price" value="" />
<span asp-validation-for="Price" class="text-danger"></span><br />
Artist: <select name="Artist">
@foreach (Artist artist in ViewBag.Artists)
{
<option [email protected]>@artist.Name</option>
}
</select>
<span asp-validation-for="Artist"></span><br />
Genre: <select name="Genre">
@foreach (Genre genre in ViewBag.Genres)
{
<option [email protected]>@genre.Name</option>
}
</select>
<span asp-validation-for="Genre"></span><br />
<input type="submit" value="Submit" />
</form>
Ошибка возникает в следующем действии в мой контроллер, AlbumsController.cs:
[HttpPost]
public IActionResult Add(Album a)
{
var albums = _context.Albums;
albums.Add(a);
_context.SaveChanges();
var albums2 = _context.Genres.ToList();
ViewBag.Artists = _context.Artists.ToList();
ViewBag.Genres = _context.Genres.ToList();
return View("Index", albums2);
}
В частности, при попытке сохранить изменения обновление происходит из-за того, что внешние ключи объекта Album, ArtistID и GenreID равны 0 каждый раз, а Artist и Gen - равны нулю. Для полноты картины, вот это класс Альбом:
public class Album
{
public int AlbumID { get; set; }
public string Title { get; set; }
[Required]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
public int ArtistID { get; set; }
public Artist Artist { get; set; }
public int GenreID { get; set; }
public Genre Genre { get; set; }
}
кажется, что какая-то ошибка препятствует формы от правильной подачи художника и жанровые поля, оба из которых являются select
элементы. Кроме того, я ожидаю, что даже если бы фактическое содержимое этих элементов было представлено, оно не включало бы значения FK.
Обратите внимание, что ViewBag.Artists и ViewBag.Genres определены как _context.Artists.ToList()
и _context.Genres.ToList()
соответственно в действии для визуализации представления. Каждый жанр и исполнитель включает в себя Name
и [class]ID
, а Исполнитель имеет связанное текстовое поле с именем Bio
.
Таблица альбомов содержит поля для AlbumID, ArtistID, GenreID, Price и Title. Первые три являются ints, вторая - десятичной, а последняя - nvarchar.
Что нужно сделать, чтобы:
A) Представить содержание select
элементов наряду с остальной частью формы?
B) Использовать значения ArtistID и GenreID (int
s в соответствующих классах) в качестве аргументов для заполнения таблицы Albums?
Похоже, что свойство 'asp-validation-for' в элементе' span' следует после каждого 'select' также необходимо изменить, но с этим изменением это, похоже, сработало. – Passage