2010-07-08 5 views
1

Mon problème est que lorsque je soumets le formulaire et retourne mon viewModel de type QuestionViewModel - le Type est null.ASP.net, MVC 2 - Affichage viewModel

Voir le code ci-dessous.

Mon contrôleur:

public ActionResult Create() 
    { 
     var viewModel = new QuestionViewModel { 
      Question = question, 
      Type = questionType, 
      Types = surveyDB.QuestionTypes.ToList() 
     }; 
     return View(viewModel); 
    } 

À mon avis:
`

<h2>Skapa en fråga</h2> 
<% Html.EnableClientValidation(); %> 

<% using (Html.BeginForm()) {%> 
    <%: Html.ValidationSummary(true) %> 

     <%:Html.EditorFor(model => model.Question, new { Types = Model.Types }) %> 

     <% switch (Model.Question.Type) { 
       case 1: 
        Response.Write(Html.EditorFor(model => model.Type)); 
        break; 

       default: 

        break; 
      } 
      %> 

     <p> 
      <input type="submit" value="Skapa" /> 
     </p> 

<% } %> 

`

Lorsque l'éditeur pour model.Question est

<%: Html.LabelFor(model => model.Type) %> 
<%:Html.DropDownList("Type", new SelectList(ViewData["Types"] as IEnumerable,"Id","Type", Model.Type), "Välj en frågetyp")%> 
<% if((int)ViewData["type"] > 0) { %> 
<div class="editor-label"> 
    <%: Html.LabelFor(model => model.Text) %> 
</div> 
<div class="editor-field"> 
    <%: Html.TextBoxFor(model => model.Text) %> 
    <%: Html.ValidationMessageFor(model => model.Text) %> 
</div> 

Et l'éditeur pour model.Type

<%: Html.LabelFor(model => model.Alternative) %> 
<%: Html.TextAreaFor(model => model.Alternative, new { @Class="alternatives" })%> 
<%: Html.ValidationMessageFor(model => model.Alternative)%> 

Quand je soumets je finis ici:

[HttpPost] 
    public ActionResult Create(QuestionViewModel viewModel) 
    { 
     **// This becomes null** 
     string alternatives = viewModel.Type.Alternatives; 
    } 

Mon viewmodel ressemble à ceci

namespace ASurvey.ViewModels { 
    public class QuestionViewModel { 
     public Question Question { get; set; } 
     public List<QuestionType> Types { get; set; } 
     public MultipleChoice Type { get; set; } 
    } 
} 
+1

MultipleChoice a-t-il un constructeur par défaut pour que MVC puisse le créer? Vous n'avez pas publié le code. – queen3

Répondre

1

Dans votre éditeur de question ou avoir le code Html.DropDownList("Type" .... On dirait qu'il remplace votre éditeur QuestionViewModel.Type.

Essayez d'utiliser Html.DropDownListFor(x => x.Type ... dans l'éditeur de questions. Il rendra le nom attribué comme "Question.Type", mais pas seulement "Type".