Próbuję przeprowadzić ankietę i postanowiłem ViewModel zbindować w ten sposób, że każda kategoria jest wiązana z boolem: użytkownik wybiera te, które mu odpowiadają, i przy kategorii mamy jego wybór. Problem w tym, że po wysłaniu forma mój ViewModel jest pusty. Ma ktoś pomysł/radę, jak zbindować ten słownik, żeby został wypełniony na poziomie kontrolera?
Kontrolery
public ActionResult Questionnaire()
{
var vm = new QuestionnaireViewModel();;
vm.BestCategories = _db.Categories.ToDictionary(k => k, v => false);
return View(vm);
}
[HttpPost]
public async Task<ActionResult> Questionnaire(QuestionnaireViewModel model)
{
return null;
}
ViewModel
public class QuestionnaireViewModel
{
public IDictionary<Category, bool> BestCategories { get; set; }
}
Widok
@using (@Html.BeginForm("Questionnaire", "Account"))
{
@Html.AntiForgeryToken()
<div id="login-error">
@Html.ValidationMessage("loginerror", "")
@Html.ValidationSummary()
</div>
<table id="login-table" style="margin-left: auto; margin-right: auto;">
@foreach(var category in Model.BestCategories)
{
<tr>
<td style="padding: 0px 0px 0px 0px; text-align: left;">
@Html.LabelFor(o => o.BestCategories[category.Key], category.Key.Name)
</td>
<td style="padding: 0px; text-align: left;">
@Html.CheckBoxFor(o => o.BestCategories[category.Key])
</td>
<td></td>
</tr>
}
<tr>
<td></td>
<td colspan="2" style="text-align: right; padding-right: 20px;">
<button type="submit" class="btn btn-primary">Wyślij</button>
</td>
</tr>
</table>
}