2010-05-05 7 views
0

Je commence à apprendre MVC 2.0 et j'essaye de créer un site avec un quiz: on pose une question à l'utilisateur et lui donne plusieurs options de réponse. S'il choisit la bonne réponse, il obtient des points, s'il ne le fait pas, il les perd.où stocker des données temporaires dans le projet MVC 2.0

J'ai essayé de le faire de la manière suivante


    public class HomeController : Controller 
    { 
     private ITaskGenerator taskGenerator = new TaskGenerator(); 
     private string correctAnswer;

public ActionResult Index() 
    { 
     var task = taskGenerator .GenerateTask(); 
     ViewData["Task"] = task.Task; 
     ViewData["Options"] = task.Options; 

     correctAnswer= task.CorrectAnswer; 
     return View(); 
    } 

    public ActionResult Answer(string id) 
    { 
     if (id == correctAnswer) 
      return View("Correct") 

     return View("Incorrect"); 
    } 
} 

Mais j'ai un problème: lorsque l'utilisateur répond à la classe cotroller est recréée et je lâche réponse. Alors, quel est le meilleur endroit pour stocker la bonne réponse? Devrais-je créer une classe statique à cette fin?
Merci pour votre aide!

Répondre

2

Il existe plusieurs façons de conserver les données dans plusieurs demandes.

  • Cookies
  • couche de base de données
  • __gVirt_NP_NN_NNPS<__ état d'affichage (rendre les données vers le bas et le transmettre de nouveau dans chaque demande)

pour ne citer que quelques-uns. Le plus simple d'entre eux est probablement une implémentation d'état d'affichage. Vous pouvez lancer le vôtre comme ceci

<input type="hidden" name="question_1" value="<%=ViewData["question_1"]%>" /> 

Cette entrée sera réaffichée lors de la soumission suivante, afin que vous puissiez garder une trace de la valeur.

public ActionResult Step1Post(string answer) 
{ 
    ViewData["question_1"] = answer; 
    return View("Step2") 
} 

public ActionResult Step2Post(string answer, string question_1) 
{ 
    question_1; // the answer from step 1 
    answer; // the answer from step 2 
} 
+0

Bien sûr, la réponse correcte serait visible par l'utilisateur s'il devait voir la source de la page. –

+0

@RexM, Ne donnez pas la bonne réponse sur la page. Juste la réponse que l'utilisateur a saisie. La validation finale devrait être effectuée après la dernière étape. – Joel

0

vous pouvez également stocker en session avec un guid clé unique et stocker seulement le sessionKey dans la vue comme une entrée cachée

réellement pourrait aussi dépendre de la quantité de données que vous voulez

0

Cela ressemble à taskGenerator.GenerateTask() vous donnera un certain type de tâche, mais cette tâche est-elle persistante partout? (D'où cette méthode tire-t-elle la tâche)?

S'il existe un ID associé à la tâche, vous pouvez envoyer le taskId vers le bas dans votre vue, puis relancer la tâche, lorsqu'ils répondent. Vous pouvez ensuite récupérer le CorrectAnswer de cette tâche et faire votre comparaison.

Questions connexes