如何让我的视图显示我的数据库表

时间:2016-06-13 01:13:25

标签: asp.net-mvc asp.net-mvc-4 asp.net-core

我是ASP.net的新手。我试图找出如何使我的编辑/显示页面正常工作的多选列表框。

我的创建工作正常,并保存到我的数据库,但我无法弄清楚如何返回编辑页面,仍然看到所选的值。 希望这是有道理的。

以下是我对create方法的代码。记录在两个表中都保存得很好,但是我无法从我的选项表中获取值。 我想尝试使编辑视图看起来像创建视图

控制器

[HttpPost]
public IActionResult Create(MusicViewModel model)
{
    if(ModelState.IsValid)
    {
        var album = new Music();
        album.Album = model.Album;
        album.Artist = model.Artist;
        album.Label = model.Label;
        album.Review = model.Review;
        album.ReleaseDate = model.ReleaseDate;
        foreach(Types type in model.Options)
        {var opt = new Options();
            opt.Music = album;
            opt.Types = type;
            _musicData.AddOptions(opt); 
        }
        _musicData.Add(album);
        _musicData.Commit();
        return RedirectToAction("Details", new { id = album.MusicID });
    }
    return View();
}

Music.cs

public enum Types
{
    Spotify,
    Groove,
    CD,
    Vinyl,
    Pandora
}

public class Music
{
    public int MusicID { get; set; }
    [Required]
    [MaxLength(50),MinLength(5)]
    public string Artist { get; set; }
    [Required, MinLength(5)]
    public string Album { get; set; }
    public int Rating { get; set; }
    public Label Label { get; set; }
    [DataType(DataType.Date)]
    [Display(Name ="Release Date")]
    public DateTime ReleaseDate { get; set; }
    public string Review { get; set; }
    public List<Options> Options { get; set; }
}

public class Options
{
    public int OptionsID { get; set; }
    public Types Types { get; set; }
    public int MusicID  { get; set; }
    public Music Music { get; set; }
}

public class MusicDbContext:DbContext
{
    public DbSet<Music> Albums { get; set; }
    public DbSet<Options> Options { get; set; }
}

查看

@model Music
....
<form asp-action="Create" method="post">
<div class="row">
    <div class="col-md-3 col-md-offset-2">
        <fieldset class="form-group">
            <label asp-for="Artist"></label>
            <input class="form-control" asp-for="Artist" />
            <span asp-validation-for="Artist" class="alert"></span>
        </fieldset>
    </div>

    <div class="col-md-3">
        <fieldset class="form-group">
            <label asp-for="Album"></label>
            <input class="form-control" asp-for="Album" />
            <span asp-validation-for="Album" class="alert"></span>
        </fieldset>
    </div>

    <div class="col-md-3">
        <label asp-for="Label"></label>
        @Html.DropDownList("Label", Html.GetEnumSelectList(typeof(Label)), "-------", new { @class = "form-control" })
    </div>
</div>

<div class="row">
    <div class="col-md-3 col-md-offset-2">
        <fieldset class="form-group">
            <label asp-for="Options"></label>
            <select multiple class="form-control" asp-for="Options"
                asp-items="@Html.GetEnumSelectList(typeof(Types))"></select>
        </fieldset>
    </div>
    <div class="col-md-3">
        <fieldset class="form-group">
            <label asp-for="ReleaseDate"></label>
            <input type="text" asp-for="ReleaseDate" class="DateBox form-control" />
            <span asp-validation-for="ReleaseDate" class="alert"></span>
        </fieldset>
    </div>
    </div>
    <div class="col-md-offset-3"><input class="btn btn-info" type="submit" value="Submit" /></div>
</form>

1 个答案:

答案 0 :(得分:0)

我想通了,可能不是最有效的方式,但至少代码可以运行

[HttpPost]
    public IActionResult Edit(int id,MusicViewModel model)
    {
        var album = _musicData.GetM(id);

        if (album != null && ModelState.IsValid)
        {
            album.Album = model.Album;
            album.Artist = model.Artist;
            album.Label = model.Label;
            album.Review = model.Review;
            album.ReleaseDate = model.ReleaseDate;
            _musicData.RemoveOptions(id);

            foreach (Types type in model.Options)
            {
                var opt = new Options();
                opt.MusicID = id;
                opt.Types = type;
                _musicData.AddOptions(opt);

            }

                _musicData.Commit();
            return RedirectToAction("Details",id);
        }
        return View(album);
    }