Wir versuchen, unser ViewModel mit dem Senden des Formulars an unseren Controller zu übergeben. Wenn das ViewModel bei unserer POST-Methode eintrifft, ist es ungültig und null.Das Modell ist ungültig auf dem Post
VraagViewModel:
public class VraagViewModel
{
public List<Thema> Themas { get; set; }
public List<Gevolg> Condities { get; set; }
public Vraag Vraag { get; set; }
public List<Gevolg> GekozenCondities { get; set; }
public Thema Thema { get; set; }
public Antwoord Antwoord { get; set; }
}
Controller:
[HttpGet]
public ActionResult Index()
{
UnitOfWorkManager uow = new UnitOfWorkManager();
IThemaManager mgr = new ThemaManager(uow);
ITestManager testmgr = new TestManager(uow);
Models.VraagViewModel model = new Models.VraagViewModel
{
Themas = mgr.GetThemas().ToList(),
Condities = testmgr.GetGevolgen().ToList(),
GekozenCondities = new List<Gevolg>()
};
return View(model);
}
[HttpPost]
public void Index(Models.VraagViewModel model)
{
Debug.WriteLine(model.GekozenCondities.Count); //Nullpointer here!
if (!ModelState.IsValid)
Debug.WriteLine("ModelState not valid!");
}
Index.cshtml:
@model UI.Mvc.Areas.Admin.Models.VraagViewModel
@{
ViewBag.Title = "Index";
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<h2>Vraagbeheer</h2>
@using (Html.BeginForm())
{
<p>@Html.DropDownList("Themas", new SelectList(Model.Themas))</p>
<p>@Html.TextArea("vraag", "Hier komt de vraagtekst")</p>
<p>@Html.ListBox("Condities1", new SelectList(Model.Condities), new { id =
"condities1" })</p>
<p>@Html.ListBox("Condities2", new SelectList(Model.GekozenCondities), new {
id = "condities2" })</p>
<p><button type="button" id="add" class="btn btn-default">Conditie
toevoegen</button></p>
<p><button type="button" id="remove" class="btn btn-default"
onclick="verwijderConditie">Conditie verwijderen</button></p>
@Html.TextArea("antwoord1", "Voor- en nadelen\nAntwoord1")
@Html.TextArea("antwoord2", "Voor - en nadelen\nAntwoord2")
@Html.TextArea("antw1Kort", "Antwoord 1")
@Html.TextArea("antw2Kort", "Antwoord 2")
<input id="gevolgInvullen" type="submit" value="Gevolgen invullen"
class="btn btn-default" />
}
@section scripts{
<script type="text/javascript">
$(function() {
$("#add").bind("click", function (e) {
$("#condities1 > option:selected").each(function() {
$(this).remove().appendTo("#condities2");
});
e.preventDefault();
});
$("#remove").bind("click", function (e) {
$("#condities2 > option:selected").each(function() {
$(this).remove().appendTo("#condities1");
});
e.preventDefault();
});
/*$("gevolgInvullen").bind("click", function() {
Url.Action("Action", "Controller")
})*/
});
</script>
}
Frage
Wir würden gerne wissen, was bewirkt, dass das ViewModel null ist, wenn es in der POST-Methode in unserem Controller ankommt.
EDIT 1
Es scheint, dass das Modell selbst is not null.
Haben Sie bestätigt, dass das Modell null ist und nicht die GekozenCondities-Eigenschaft? – Andrei
Sie könnten die genaue Fehlermeldung, die Sie bekommen, – Ogbe
Post Es scheint, dass das Modell selbst nicht null ist. Alles innerhalb des Modells ist null außer GekozenCondities und Themas (beide mit Count = 0). – Xander