2010-03-01 4 views
2

J'ai un seul type de modèle pour envelopper différents modèles que je veux utiliser à mon avis:ASP.NET MVC 2 - Comment poster un modèle de formulaire à partir de PartialView?

public class QuestionViewData { 
     public Question Question { get; set; } 
     public IList<Answer> Answers { get; set; } 
} 

Maintenant, à mon avis de question que j'extraire les données de l'objet Question - qui est très bien. Deuxièmement, j'itérer tous les objets de réponse et de les transmettre à une vue partielle:

<% foreach(Answer item in Model.Answers) { %> 
     <% Html.RenderPartial("ShowAnswer", item); %> 
<% } %> 

Pour chaque réponse (dans la vue partielle) J'ai quelques boutons d'action (comme évaluations). J'utilise des formulaires POST séparés avec des champs cachés pour chaque bouton.

Le problème est que je ne peux pas publier tout le modèle QuestionViewData dans ma méthode d'action parce que j'ai seulement l'objet Answer comme modèle dans la vue partielle. Cependant, je dois retourner la vue de question complète de cette action qui prend QuestionViewData comme modèle.

Comment gérer de telles situations?

Répondre

1

En supposant que vos réponses contiennent toutes l'ID de la question, vous pouvez publier les réponses à votre méthode de contrôleur, puis remplir le reste de votre type de modèle QuestionViewData en recherchant à nouveau les questions de la base de données. Vous retournez ensuite votre objet QuestionViewData à la vue comme d'habitude.

1

Comme Robert Harvey dit, vous pouvez le chercher dans la base de données, mais vous pouvez également stocker en session:

[HttpGet] 
    public ActionResult ShowQuestion(int id) 
    { 
     var questionModel = new QuestionViewData(); 
     //populate questionModel 
     Session["CurrentlyHandledQuestion"] = questionModel; 
     return View(questionModel); 
    } 

    [HttpPost] 
    public ActionResult ManageAnswer(params) 
    { 
     var questionModel = (QuestionViewData)Session["CurrentlyHandledQuestion"]; 
    } 

Les données de session peuvent être perdues dans de nombreuses situations, vous devriez penser à la situation quand questionModel n'est plus disponible dans l'action POST, mais cela fonctionnera normalement la plupart du temps.

Questions connexes