2011-11-16 3 views
0

ce sont mes modèles.propriété du modèle compte 0 dans le contrôleur asp.net MVC3

public class Question 
{ 

    private string _questionNo; 
    private string _questionText; 
    private List<Option> _options; 

    public List<Option> Options 
    { 
     get { return _options; } 
     set { _options = value; } 
    } 
    public string QuestionNo 
    { 
     get { return _questionNo; } 
     set { _questionNo = value; } 
    } 
    public string QuestionText 
    { 
     get { return _questionText; } 
     set { _questionText = value; } 
    } 
} 

public class Option 
{ 

    private string _optionText; 
    private string _optionNumber; 
    public string OptionText 
    { 
     get { return _optionText; } 
     set { _optionText = value; } 
    } 
    public string OptionNumber 
    { 
     get { return _optionNumber; } 
     set { _optionNumber = value; } 
    } 
} 

Ceci est mon contrôleur.

public ActionResult GetQuestion() 
    { 
     Question_Data ques = new Question_Data(); 
     var vewmodel = ques.GetQuestion("99916939-D916-4CAE-B527-1A0CD8A3C09D", "AAFA7A2B-D840-4202-B38F-563254FF8B63", 1); 
     return View(vewmodel); 
    } 
    public ActionResult SaveDropDown(Question question) 
    { 

    } 

c'est une vue

<div data-role="fieldcontain"> 
    @using (Html.BeginForm("SaveDropDown", "GetQuestion", Model)) 
    { 
     @Html.AntiForgeryToken() 
     <fieldset> 
      <label class="select">@Model.QuestionText 
      </label> 
      <select name="selectedObjects" id="selectchoice1"> 
       @foreach (var item in Model.Options) 
       {   
        <option value="@item.OptionNumber">@item.OptionText</option> 
       } 
      </select> 
      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 
    } 
</div> 

tout semble bien. quand je clique sur le bouton créer dans la vue, il va à la SaveDropDown dans le contrôleur, mais son montrant la liste des options avec null.

J'ai défini la liste d'options dans la classe Question. il doit montrer mais il ne montre aucune option. pourquoi il se comporte comme ça. quelle est la solution pour cela.

Merci.


ce que je reçois sous forme de post

 <form method="post" action="/GetQuestion/SaveDropDown?Options=System.Collections.Generic.List%601%5Bsd.mvc.Models.Option%5D&QuestionNo=136&QuestionText=What%20is%20your%20current%20relationship%20status%3F&QuestionType=2"> 

seules les propriétés liées à la question sont publiées.

+0

Je ne suis pas sûr de comprendre votre question: dites-vous qu'au début, la page est correcte (il apparaît, la liste déroulante contient toutes les options), mais il y a un problème après avoir cliqué sur le bouton Créer? Si oui, quel est le code de la méthode _SaveDropDown_? C'est vide dans la question et ne compilera pas comme ça. Quand la vue collée est-elle utilisée (en tant que page initiale, ou lorsque vous cliquez sur le bouton _Create_, ou les deux)? – Codo

+0

lorsque je clique sur le bouton créer, dans la méthode SaveDropDown.it montrant la question.Options.count = 0. comment pourrais-je obtenir cette question.Options? – Chakradhar

Répondre

0

Votre méthode d'action accepte une instance de type "Question". Vérifiez les données qui sont passées en tant que données "FORM" en utilisant FireBug et voyez si ces données peuvent être mappées dans l'objet modèle "Question".

+0

salut pavan c'est ce que je reçois dans le formulaire – Chakradhar

1

Le problème est probablement que le classeur automatique ne comprend pas comment mapper "selectedObjects" à "question" par les noms que vous avez assignés.

Le classeur de modèle va rechercher les champs de formulaire préfixés avec le nom de variable de l'objet que vous spécifiez dans l'action du contrôleur. Dans votre cas, le classeur cherche des champs appelés "question. *".

Y at-il une raison pour laquelle vous n'utilisez pas les aides de champ intégrées dans MVC? Ceux-ci aideront à générer la convention de nommage correcte pour le classeur modèle à ramasser.

Pouvez-vous décrire mieux ce que vous essayez de faire? L'objectif de ce formulaire est-il de permettre à un utilisateur de saisir des options, de cliquer sur ajouter et de le sauvegarder? Ou est l'objectif pour l'utilisateur de voir une liste d'options, sélectionnez-en un et postez la réponse en arrière? L'une des principales raisons pour lesquelles la liste est null est qu'il n'existe aucun champ de formulaire représentant la collection d'options.

+0

k. Mon but est de créer un type de question de sondage. J'ai commencé avec l'option select. Je reçois la question et les options du serveur au format XML et la sérialiser au modèle et le lier à la vue. Je dois donc sauvegarder les options utilisateur sur le serveur. Je suis donc en train d'éditer la liste des options et de la sérialiser à nouveau en XML et de revenir au serveur et de les sauvegarder. mais ici une question peut être rendue à la fois. Donc basé sur questionNo et QuestionType je fais tout ça. Y a-t-un autre moyen de faire ça ? – Chakradhar

+0

Désolé, je n'ai pas vu votre réponse plus tôt. Travaillez-vous sur la partie administrative de la gestion des questions/réponses ou travaillez-vous sur la partie où l'utilisateur répond à l'enquête? –

+0

Dans la plupart des cas, vous voudrez séparer vos modèles d'entité (liste de questions) de ce que vous allez leur envoyer (voir le modèle). Y at-il une raison particulière pour laquelle vous voulez afficher une liste d'options? Qu'allez vous faire avec eux? Avec les champs cachés nommés Options [0] .OptionText et Options [0] .OptionName et Options [1] .OptionText et Options [1] .OptionName le classeur de modèle générerait automatiquement votre liste

1

s'il vous plaît dites ce que vous attendiez. Pour quelle propriété dans la classe Question voulez-vous lier l'option sélectionnée.

Ou Est-ce que cette

public ActionResult SaveDropDown(Question question, string selectedObjects) 
    { 
      //use selectedObjects property to read the chosen option 
    } 
+0

je veux le QuestionNo et sélectionné les propriétés Options de Question. – Chakradhar

0

Essayez, ajoutez une propriété SelectedOption à votre modèle

public class Question 
{ 

    private string _questionNo; 
    private string _questionText; 
    private List<Option> _options; 
    private Option _selectedOption; 


    public Option SelectedOption 
    { 
     get { return _selectedOption; } 
     set { _selectedOption = value; } 
    } 
    public List<Option> Options 
    { 
     get { return _options; } 
     set { _options = value; } 
    } 
    public string QuestionNo 
    { 
     get { return _questionNo; } 
     set { _questionNo = value; } 
    } 
    public string QuestionText 
    { 
     get { return _questionText; } 
     set { _questionText = value; } 
    } 
} 

Et dans votre vue utilisation

@Html.DropDownListFor(t=>Model.SelectedOption.OptionNumber 
         ,new SelectList(Model.Options 
             , "OptionNumber" 
             , "OptionText")) 

De plus, vous passez votre Model comme paramètre de valeur de route eter dans votre déclaration BeginForm - peut être une source de problèmes.

Questions connexes