首页 文章

MVC.NET Core / Razor:将选择框中的值提交给DB

提问于
浏览
0

表单在Add.cshtml中定义:

@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>
Price: <input type="number" name="Price" value="" /> <span asp-validation-for="Price" class="text-danger"></span>
Artist: <select name="Artist"> @foreach (Artist artist in ViewBag.Artists) { <option value=@artist.ArtistID>@artist.Name</option> } </select> <span asp-validation-for="Artist"></span>
Genre: <select name="Genre"> @foreach (Genre genre in ViewBag.Genres) { <option value=@genre.GenreID>@genre.Name</option> } </select> <span asp-validation-for="Genre"></span>
<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和Genre都为null . 为完整起见,这是Album类:

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; } 
}

似乎有些错误阻止了表单正确提交Artist和Genre字段,这两个字段都是 select 元素 . 此外,我希望即使提交了这些要素的实际内容,也不包括FK值 .

请注意,在呈现视图的操作中,ViewBag.Artists和ViewBag.Genres分别定义为 _context.Artists.ToList()_context.Genres.ToList() . 每个流派和艺术家都包含 Name[class]ID ,而Artist也有一个名为 Bio 的关联文本字段 .

“相册”表包含AlbumID,ArtistID,GenreID,Price和Title的字段 . 前三个是整数,第二个是小数,最后一个是nvarchar .

需要做些什么:

A)提交 select 元素的内容以及表格的其余部分?

B)使用ArtistID和GenreID值(各自类中的 int )作为填充“专辑”表的参数?

1 回答

  • 2

    每个选择输入的名称需要与模型中的字段相对应,该值将在模型绑定发生时填充 .

    更改代码:

    <select name="Artist">
    

    <select name="ArtistID">
    

    和Genre select一样,name =“GenreID”

    这将允许模型绑定正确地获取这些值,然后您可以根据需要在Controller中使用它们 .

相关问题