2012-03-21 68 views
0

我有一個操作方法VerifyNewUser(),當用戶點擊他們的電子郵件(註冊驗證url)中的url時被調用。從不同的控制器使用ViewBag?

操作方法在ViewBag中設置布爾屬性,將用戶更新爲已驗證的用戶,然後加載用戶自動登錄的主頁。在/ Home/Index視圖中,我想檢查ViewBag for我設置的屬性,並顯示一個jQuery UI對話框,如果它是真的。

但是,我的ViewBag是空的,腳本被跳過。注意我將消息存儲在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); 
     } 
    } 

沒有什麼特別的Home控制器:

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

在主頁視圖我有這樣的代碼多數民衆贊成應該檢查該網頁被點擊的確認網址後裝載應展示一個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> 
    } 

感謝您的時間

+0

@ShankarSangoli的答案似乎是你想要做什麼,但有一點我注意到的是行'的視圖@if(ViewBag.RegistrationLoad ==‘真’) '應該拋出一個異常,如果這行真的被執行,因爲'=='不知道如何比較'bool'和'string'。 – Craig 2012-03-22 00:20:11

+0

另一方面,如果您正在嘗試訪問在另一個「Action」中創建/設置的一個「Action」中的ViewBag屬性,那麼您將需要另一個解決方案,如果是這種情況,我可以發佈一個答案。 – Craig 2012-03-22 00:22:00

回答

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) 
    { 
     ..... 
     ..... 
    } 
相關問題