http://i.imgur.com/uDWL0YE.png
我正在关注Pluralsight上的Full Stack .NET课程,到目前为止一直运行良好。当我以用户身份登录并尝试向数据库添加演出时,我无法在下拉列表中选择一种类型,因此无法添加演出。我可以很好地查看这些类型,我只是不能选择一种。
以下是“创建视图”下拉列表的代码:
<div class="form-group">
@Html.LabelFor(m => m.Genre)
@Html.DropDownListFor(m => m.Genre, new SelectList(Model.Genres, "Id", "Name"), "", new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Genre)
</div>
这是我在viewmodels文件夹中的Gig类:
public class GigFormViewModel
{
[Required]
public string Venue { get; set; }
[Required]
[FutureDate]
public string Date { get; set; }
[Required]
[ValidTime]
public string Time { get; set; }
[Required]
public byte Genre { get; set; }
[Required]
public IEnumerable<Genre> Genres { get; set; }
public DateTime GetDateTime()
{
return DateTime.Parse(string.Format("{0} {1}", Date, Time));
}
}
这是控制器中HttpPost操作的代码:
[Authorize]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(GigFormViewModel viewModel)
{
if (!ModelState.IsValid)
{
viewModel.Genres = _context.Genres.ToList();
return View("Create", viewModel);
}
var gig = new Gig()
{
ArtistId = User.Identity.GetUserId(),
DateTime = viewModel.GetDateTime(),
GenreId = viewModel.Genre,
Venue = viewModel.Venue
};
_context.Gigs.Add(gig);
_context.SaveChanges();
return RedirectToAction("Index", "Home");
}
我无法弄清楚为什么我无法选择一种类型并将其保存到数据库中。单击“保存”时,它不会给我一个验证错误,而是重新加载页面。如果您需要更多信息,请告诉我。
答案 0 :(得分:1)
您不应该在ViewModel上将Genres
标记为Required
,因为这只是显示视图时所需的支持列表。但是,当提交视图中的表单时,此属性将没有值,因此验证失败。
答案 1 :(得分:1)
问题是您在Genres
[Required]
public IEnumerable<Genre> Genres { get; set; }
在下拉列表中
@Html.DropDownListFor(m => m.Genre, new SelectList(Model.Genres, "Id", "Name"), "", new { @class = "form-control" })
m.Genre
将返回应设置为required
的所选值,但new SelectList(Model.Genres, "Id", "Name")
仅执行一次填充数据,而不会将数据返回到模态