无法在下拉菜单中选择元素下拉菜单
问题描述:
http://i.imgur.com/uDWL0YE.png无法在下拉菜单中选择元素下拉菜单
我下面就Pluralsight完整的堆栈.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文件夹我的千兆级:
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");
}
我不明白为什么我无法选择一个genr e并将其保存到数据库中。它不会给我一个验证错误,当我点击“保存”,而是重新加载页面。让我知道你是否需要更多信息。
答
您不应在ViewModel上将Genres
标记为Required
,因为这只是显示视图时所需的支持列表。但是当视图中的表单被提交时,这个属性将没有任何价值,所以验证失败。
答
问题您标示要求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")
只做一次旅行填充数据它不会将数据返回到模式
谢谢,我现在能够保存一个演出,但我仍然是una当我点击它时,让下拉选择中的流派保持选定状态。我仍然会将您的答案标记为已接受。 – Leth
@ user1696992看看http://*.com/questions/40384865/html-dropdownlistfor-always-displays-blank-even-with-a-list-item-selected - 也许你有同样的问题与CSS ? – NineBerry
谢谢,解决了它。 – Leth