2017-04-21 3 views
-1

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.

+0

Haben Sie bestätigt, dass das Modell null ist und nicht die GekozenCondities-Eigenschaft? – Andrei

+0

Sie könnten die genaue Fehlermeldung, die Sie bekommen, – Ogbe

+0

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

Antwort

0

Sie kein Feld haben genannt: GekozenCondities in Ihrer Form, so natürlich wird es null sein ...

In Ihrem Form es heißt Condities2

<p>@Html.ListBox("Condities2", new SelectList(Model.GekozenCondities), new { 
id = "condities2" })</p> 

ändern Sie das zu;

<p>@Html.ListBox("GekozenCondities", new SelectList(Model.GekozenCondities), new { 
id = "condities2" })</p> 

Aber ich denke, das ist sowieso nicht funktionieren, da es nur 1 Wert wird Post (Der ausgewählt Wert aus der Dropdown), aber in Ihrem Modell ist es eine Liste ...

lesen Sie auf die Grundlagen von Formen?

+0

Es ist eine 'ListBox' Eingabe, so dass _ mehrere ausgewählte Werte übergeben werden können. – granit

+0

Cool, in diesem Fall sollte das reparieren! – Milney

0

Ihr Modell ist null nach dem Post, da es in Sicht, Inside-Formular, enthält keine Eigenschaft VraagViewModel Klasse. Sie müssen den richtigen Steuerelementnamen zuweisen.

z. B. nehmen Sie an, dies ist Ihre Klasse.

public class VraagViewModel 
    { 
     public Antwoord Antwoord { get; set; } 
    } 
    public class Antwoord 
    { 
     public string Name { get; set; } 
    } 

Dann auf Ihrer Ansicht nach Ihre Steuer Name Antwoord.Name wie thi

<input type="text" name="Antwoord.Name"/> 

ODER

@Html.TextBoxFor(x => x.Antwoord.Name) 

Dann verwenden Sie können es in Ihrer Aktion zugreifen Modell wäre .Antwoord.Name

Verwandte Themen