2013-02-22 217 views
0

如果用戶登錄有效,我會將視圖重定向到另一個視圖,如下所示。以下方法在Controller類中。傳遞數據到另一個視圖

if (loginSuccess(email,pwd)) 
{     
    FormsAuthentication.SetAuthCookie(email, false); 
    return RedirectToAction("Index", "SuccessPage"); 

} 

現在我想顯示在重定向視圖的用戶名(這是/SuccessPage/Index)。我怎樣才能做到這一點 ?

+0

你用什麼來跟蹤用戶? FormsAuthentication? – 2013-02-22 19:28:49

+0

登錄成功正在做什麼?通常您會驗證用戶並在會話中爲用戶保存特定數據。 – 2013-02-22 19:28:58

+0

好吧,我補充說,但我仍然如何獲得SuccessPage視圖上的用戶名? – 2013-02-22 19:30:51

回答

2

當用戶通過身份驗證時,可以使用HttpContext來獲取基本的用戶信息。例如,你可以使用下面來獲取用戶名:

string userName = HttpContext.User.Identity.Name; 

您不必擔心通過控制器之間的信息。只要用戶身份驗證,信息就可以使用。

+0

所以我不需要從LoginController傳遞它? – 2013-02-22 19:38:58

+0

只要用戶通過身份驗證,就不會在'HttpContext'中使用它。它不必傳遞。它將在控制器中可用。 – 2013-02-22 19:39:48

3

您可以在重定向中傳遞參數。

if (loginSuccess(email,pwd)) 
{       
    string name = User.Identity.Name; 
    return RedirectToAction("Index", "SuccessPage"), new {username = name }; 
} 

顯然,控制器動作需要訪問到的用戶名屬性,然後才能傳遞值

:上面的示例是用於理解如何傳遞附加參數有用重定向,但在這種情況下,由於User.Identity.Name在會話中可用,並且您可以從任何控制器或視圖訪問該會話,因此無需通過(請參閱Josh's response),因此會在會話中提供User.Identity.Name

+0

不,成功頁面在另一個控制器中。我如何從其他控制器訪問用戶名? – 2013-02-22 19:33:03

+0

您可以像上面那樣在重定向中傳遞用戶名。我已編輯它以顯示獲取登錄用戶名的一種方式 – Jack 2013-02-22 19:34:53

+0

爲什麼要傳遞數據,何時已經可以免費獲取? – 2013-02-22 19:43:40

1

在SuccessPage.Index操作中,獲取用戶名並通過模型將其傳遞到視圖中。

要獲取用戶名,可以從保存的Session變量中獲取,也可以使用controller.HttpContext.User.Identity.Name。

1

如果我們只是在討論傳遞數據,那麼您有4個選項。 (如果我們談論的只是用戶名,然後你想Josh's response)的重定向(as Jack suggested

return RedirectToAction("Index", "SuccessPage"), new {username = name }; 

傳遞參數的臨時數據存儲它(僅適用於1項要求)

TempData[Key] = name; 
return RedirectToAction("Index", "SuccessPage"); 

在會話存儲它(楦只要會話持續)

Session[Key] = name; 
return RedirectToAction("Index", "SuccessPage"); 

將其存儲在數據庫中並通過其會話ID鏈接該數據。

/* databasey code here */ 
return RedirectToAction("Index", "SuccessPage"); 

這就是你的全套從最簡單的選擇,最複雜的。在你的情況下,我建議你只需在URL中傳遞值(第一個值),隨着系統擴展和增長,你可能需要考慮嘗試其他選項。

值得注意的是,TempData不會跨頁刷新。

+1

老實說,你可能不會算第一個選項。爲什麼要傳遞可以免費獲得的數據呢? – 2013-02-22 19:42:44

+0

那麼這取決於我們是在回答問題的標題還是內容。你的答案是最好的內容,所以我把它鏈接起來。 – Quibblesome 2013-02-22 19:45:03

+1

@Quibblesome TempData現在持續到從tempdatadictionary(自MVC2以來)讀取值。更多信息在我的答案在這裏:http://stackoverflow.com/a/14967113/2040555 – Jack 2013-02-22 19:46:10

相關問題