Я пытаюсь создать ListBox, в котором можно выбрать несколько тегов для цитаты, которая создается в форме. Все отображается нормально, все параметры, которые должны быть показаны, отображаются в ListBox, но даже несмотря на то, что я выбрал некоторые из них, соответствующая Коллекция в возвращенной ViewModel пуста или равна нулю.
Я упростил модель ради своего вопроса, и в основном в ней есть только кавычки с отношением «многие ко многим» к тегам. Итак, когда я хочу создать новую цитату, я должен дать ей содержание и набор тегов.
Итак, у меня есть такая модель:
public class Quote
{
public int Id { get; private set; }
[Required]
public string Content { get; set; }
public ICollection<Tag> Tags { get; private set; }
}
и
public class Tag
{
public int Id { get; set; }
[Required]
public string Designation { get; set; }
public ICollection<Quote> Quotes { get; private set; }
}
ViewModel:
public class QuoteCreateViewModel
{
public IEnumerable<Tag> Tags { get; set; }
public Quote Quote { get; set; }
public QuoteCreateViewModel(Quote quote, IList<Tag> tags)
{
Quote = quote;
Tags = tags;
}
}
КотировкиКонтроллер:
public ActionResult Create()
{
QuoteCreateViewModel viewModel =
new QuoteCreateViewModel(new Quote(), _context.Tags.ToList());
return View(viewModel);
}
[HttpPost]
public ActionResult Create(QuoteCreateViewModel quoteCreateViewModel)
{
Quote quote = quoteCreateViewModel.Quote;
_context.Quotes.Add(quote);
_context.SaveChanges();
return RedirectToAction("Index");
И соответствующий вид:
@model CiteMe.ViewModels.QuoteCreateViewModel
@using (Html.BeginForm("Create", "Quotes"))
{
<div class="form-group">
@Html.LabelFor(m => m.Quote.Content)
@Html.TextBoxFor(m => m.Quote.Content, new { @class = "form-control"})
</div>
<div class="form-group">
@Html.LabelFor(m => m.Quote.Tags)
@Html.ListBoxFor(m => m.Quote.Tags, new MultiSelectList(Model.Tags, "Id", "Designation"), new { @class = "form-control", multiple = "multiple" })
</div>
<button type="submit" class="btn btn-primary">Save</button>
}
Насколько я понимаю, @Html.ListBoxFor(m => m.Quote.Tags, new MultiSelectList(Model.Tags, "Id", "Designation"), new { @class = "form-control", multiple = "multiple" })
должен помочь мне. Я также попробовал подход, который нашел здесь, но он дает те же результаты. Пустые коллекции, даже если что-то было выбрано или пусто вместо экземпляра коллекции.