2012-03-21 5 views
0

J'ai une méthode d'action VerifyNewUser() qui est appelée lorsque l'utilisateur clique sur une URL dans son email (url de vérification d'enregistrement). La méthode action définit une propriété bool dans le ViewBag, met à jour l'utilisateur à un utilisateur vérifié, puis je charge la page d'accueil avec l'utilisateur connecté automatiquement. Dans la vue/Home/Index, je veux vérifier le ViewBag pour la propriété que je définis et affiche une boîte de dialogue jquery ui si c'est vrai.Utiliser ViewBag depuis un autre contrôleur?

Cependant, mon ViewBag est null et le script est ignoré. Remarque: Je stocke le message dans le homeController.ViewBag, donc j'ai pensé que cela fonctionnerait. Peut-être y at-il un meilleur moyen de le faire sans ViewBag?

public ActionResult VerifyNewUser() 
    { 
     if(everything checks out) 
     { 
       HomeController homeController = new HomeController(); 
       homeController.ViewBag.RegisterationLoad = true; 
       homeController.ViewBag.VerificationMessage = "Thank you! Your account has been activated"; 
       return View("../Home/Index", null); 
     } 
    } 

rien de spécial dans le contrôleur Home:

public ActionResult Index(){ 
     return View(); 
    } 

Dans la vue chez moi avons ce code des thats censé vérifie si la page d'accueil est en cours de chargement après avoir cliqué sur l'URL de vérification et doit afficher une boîte de dialogue ui jquery :

@if (ViewBag.RegistrationLoad == "true") 
    { 
<script type="text/javascript"> 
    $("<div></div>").html("<span>@ViewBag.VerificationMessage</span>").dialog({ 
     width: 365, height: 165, minWidth: 365, minHeight: 165, maxWidth: 365, maxHeight: 165, 
     autoOpen: true, modal: true, dialogClass: 'noTitleDialog', position: "center", 
     buttons: { 
      "Ok": function() { 
       $(this).remove(); 
      } 
     } 
    }); 
</script> 
    } 

Merci pour votre temps

+0

réponse de l » @ShankarSangoli de semble être ce que vous voulez faire, mais une chose que je remarque est la ligne' @if (ViewBag.RegistrationLoad == « true ») 'devrait lancer une exception si cette ligne est en cours d'exécution parce que' == 'ne saura pas comment comparer' bool' et 'string'. – Craig

+0

Si d'autre part vous essayez d'accéder à une propriété 'ViewBag' dans une' Action' qui a été créée/définie dans une autre 'Action', alors vous aurez besoin d'une autre solution à laquelle je peux poster une réponse si c'était le cas. – Craig

Répondre

0

ne pas utiliser contrôleur pour définir les attributs de données à l'intérieur ViewBag. Réglez-le normalement et il peut être accessible dans n'importe quelle vue. Assurez-vous de l'utiliser correctement. Dans votre code, vous définissez un drapeau booléen à l'intérieur de ViewBag et vous le comparez à une chaîne qui échouera toujours.

Essayez ceci.

public ActionResult VerifyNewUser() 
{ 
    if(everything checks out) 
    { 
      ViewBag.RegisterationLoad = true; 
      ViewBag.VerificationMessage = "Thank you! Your account has been activated"; 
      return View("../Home/Index", null); 
    } 
} 

De l'avis

@if (ViewBag.RegistrationLoad == true) 
    { 
     ..... 
     ..... 
    } 
Questions connexes