/ / Passer une variable d'une classe à une vue d'une classe différente - asp.net-mvc

Passer une variable d'une classe à une vue d'une autre classe - asp.net-mvc

J'ai un peu de mal à passer la variablescore, qui est une variable dans ma classe d'évaluation, qui est initialisée ici dans ma méthode [httpPost] ifstatements (modèle d'évaluation) dans mon contrôleur Quiz à une vue appartenant à un contrôleur différent d'une classe différente. Lorsque le score est supérieur à zéro, c'est-à-dire que je réponds à au moins une question correctement, je suis amené à la vue des résultats et le score me s'affiche. Mais j'ai du mal à imprimer ce score dans une autre vue appelée Index qui fait partie de ma méthode d'index dans mon contrôleur LEADERBOARD de la classe LEADERBOARD

Contrôleur de quiz

public ActionResult ifStatement()
{
var evalVM = new Evaluation();

//the below is hardcoded for DEMO. you may get the data from some
//other place and set the questions and answers

var q1 = new Question { ID = 1, QuestionText = "1. Which of the following shows the correct syntax for an if statement?" };
q1.Answers.Add(new Answer { ID = 12, AnswerText = "a. if expression" });
q1.Answers.Add(new Answer { ID = 13, AnswerText = "b. if { expression }" });
q1.Answers.Add(new Answer { ID = 14, AnswerText = "c. if ( expression ){}" });
q1.Answers.Add(new Answer { ID = 15, AnswerText = "d. expression if" });
evalVM.Questions.Add(q1);

return View(evalVM);
}

[HttpPost]
public ActionResult ifStatement(Evaluation model)
{
int score = 0;

if (ModelState.IsValid)
{
using (UsersContext db = new UsersContext())
{
foreach (var q in model.Questions)
{
var qId = q.ID;

List<string> listSelectedAnswer = new List<string>();

listSelectedAnswer.Add("14");
listSelectedAnswer.Add("19");
listSelectedAnswer.Add("22");
listSelectedAnswer.Add("25");
listSelectedAnswer.Add("28");
listSelectedAnswer.Add("33");

foreach (string answer in listSelectedAnswer)
{
foreach (var answer2 in model.Questions)
{
if (answer == answer2.SelectedAnswer)
{
score = score + 3;
}
}
}

model.Score = score;

ViewBag.score = model.Score;

if (score > 0)
{
return View("results");
}
else
{
//score = 0;
//return Content("Please check all answers have been submitted!");
return Content("Error, please ensure all questions have been answered. You may use the back button to continue the Quiz."); //PRG Pattern
}
}
}
}

model.setScore(score);
return View("ThankYou");
}

Contrôleur de classement

public class LeaderboardController : Controller
{
UsersContext db = new UsersContext();
//
// GET: /Leaderboard/

TutorialEntities t = new TutorialEntities();
Evaluation e = new Evaluation();

public ActionResult Index()
{
// Evaluation ev = new Evaluation();
// var tutorial = t.Evaluations.ToList();
//ViewBag.Scores = t.Evaluations.Select(a => a.Score).ToList();
//ViewBag.Scores = e.getScore();
//ViewBag.Score = e.getScore();

ViewBag.Users = db.UserProfiles.ToList();
ViewBag.Scores = t.Evaluations.ToList();
return View();

}
}

Vue d'index

<h2>Leaderboard</h2>

@foreach (var item2 in ViewBag.Users)
{
<p>
Score: @ViewBag.Score
</p>
}

@foreach (var item in ViewBag.Users)
{
<p>
UserID: @item.UserId
<br />
UserName: @item.UserName
<br />
</p>
}

Tout ce qui apparaît sur la page quand je vais cette vue estle nom des personnes inscrites sur mon site et leur identifiant mais le score est vierge! Je n'arrive pas à comprendre ce que j'ai essayé, j'ai essayé de nombreuses façons, mais il semble qu'il ne puisse pas voir le score qui est initialisé dans la méthode ifstatement

Réponses:

0 pour la réponse № 1

Votre contrôleur définit viewbag.scores, mais votre vue essaie d'accéder à viewbag.score?