2017-02-23 198 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")只做一次旅行填充數據它不會將數據返回到模式