2017-02-23 261 views
1

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并将其保存到数据库中。它不会给我一个验证错误,当我点击“保存”,而是重新加载页面。让我知道你是否需要更多信息。

回答

1

您不应在ViewModel上将Genres标记为Required,因为这只是显示视图时所需的支持列表。但是当视图中的表单被提交时,这个属性将没有任何价值,所以验证失败。

+0

谢谢,我现在能够保存一个演出,但我仍然是una当我点击它时,让下拉选择中的流派保持选定状态。我仍然会将您的答案标记为已接受。 – Leth

+0

@ user1696992看看http://stackoverflow.com/questions/40384865/html-dropdownlistfor-always-displays-blank-even-with-a-list-item-selected - 也许你有同样的问题与CSS ? – NineBerry

+0

谢谢,解决了它。 – Leth

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")只做一次旅行填充数据它不会将数据返回到模式