从不同的控制器使用ViewBag?

时间:2012-03-21 23:45:12

标签: jquery asp.net view viewbag

我有一个操作方法VerifyNewUser(),当用户点击他们的电子邮件中的网址(注册验证网址)时会调用该方法。

action方法在ViewBag中设置bool属性,将用户更新为已验证的用户,然后我加载主页,用户自动登录。在/ Home / Index视图中,我想检查ViewBag属性我设置并显示一个jquery ui对话框,如果它是真的。

但是,我的ViewBag为null,脚本被跳过。注意我将消息存储在homeController.ViewBag中,所以我认为这样可行。也许在没有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);
        }
    }

家庭控制器没什么特别的:

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

在主视图中,我有这个代码,它应该在点击验证网址后检查主页是否正在加载,并且应该显示一个jquery ui对话框:

   @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>   
   }

感谢您的时间

1 个答案:

答案 0 :(得分:0)

请勿使用任何控制器在ViewBag内设置数据属性。只需正常设置它就可以在任何视图中访问。只要确保你正确使用它。在您的代码中,您在ViewBag内设置一个布尔标志,并将它与一个始终失败的字符串进行比较。

试试这个。

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

在视图中

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