2009-04-19 6 views
1

J'ai des actions dans différents contrôleurs qui doivent vérifier une condition avant l'exécution. Si la condition n'est pas remplie, je souhaite que l'utilisateur soit redirigé vers une autre page avec des instructions sur la procédure à suivre (les instructions incluront un lien que l'utilisateur doit suivre).ASP.NET MVC - Rediriger vers un contrôleur/une action en transmettant des données

Par exemple l'action SendMessage() est situé dans le contrôleur de message:

public ActionResult SendMessage() 
{ 
    // check if user has enough credit 
    if (!hasEnoughCredit(currentUser)) 
    { 
     // redirect to another page that says: 

     // "You do not have enough credit. Please go to LinkToAddCreditAction 
     // to add more credit." 
    } 

    // do the send message stuff here 
} 

Je veux avoir une seule action générique appelé ShowRequirements() situé dans le contrôleur Requirements.

Dans l'action SendMessage(), je voudrais définir le message que je veux montrer à l'utilisateur, puis transférer l'utilisateur à l'action ShowRequirements(). Je ne veux pas que le message apparaisse dans l'URL de l'action ShowRequirements.

Est-il possible de communiquer ces données à l'action ShowRequirements()?

Répondre

0

D'accord, je pense que je me trompais. Comme John et Andrew l'ont mentionné, je dois simplement transmettre les données via ViewData à une vue.

J'ai donc créé un fichier RequirementsPage.aspx dans/views/Shared. Maintenant, quelle qu'en soit l'action que je suis, je remplirai dans le dictionnaire ViewData et le transmettre à la RequirementsPage.aspx comme ceci:

public ActionResult SendMessage() 
{ 
    // check if user has enough credit 
    if (!hasEnoughCredit(currentUser)) 
    { 
     // redirect to another page that says: 
     ViewData["key1"] = "some message"; 
     ViewData["key2"] = "UrlToTheAction"; 
     return View("RequirementsPage"); 
    } 

    // do the send message stuff here 
} 
6

Vous pouvez le mettre dans TempData ["message"] qui est passé à la nouvelle action en cours de redirection.

+0

Ceci est probablement la meilleure solution, mais il semble que vous pourriez vouloir reconsidérer votre logique métier. Pourquoi deux actions disjointes doivent-elles se produire ensemble, connectées via une redirection pour qu'un processus se produise? Peut-être avez-vous besoin d'abstraire du code? –

+0

Correct. Vous pouvez juste retourner l'affichage (avec ViewData/ViewModel) requis pour afficher l'erreur sans la redirection –

+0

Andrew, je ne peux pas penser à un autre moyen de vérifier ces conditions et d'agir en conséquence. Comment allez-vous faire le même scénario? – xraminx

Questions connexes