如果用户登录有效,我会将视图重定向到另一个视图,如下所示。以下方法位于Controller类中。
if (loginSuccess(email,pwd))
{
FormsAuthentication.SetAuthCookie(email, false);
return RedirectToAction("Index", "SuccessPage");
}
现在我想在重定向的视图上显示用户名(/SuccessPage/Index
)。我怎么能这样做?
答案 0 :(得分:3)
您可以在重定向中传递参数。
if (loginSuccess(email,pwd))
{
string name = User.Identity.Name;
return RedirectToAction("Index", "SuccessPage"), new {username = name };
}
(显然,控制器操作需要能够访问username属性才能传递值)
注意:上面的示例对于了解如何在重定向中传递其他参数很有用,但在这种情况下,一旦用户通过身份验证,会话中就会出现User.Identity.Name
,这样就太过分了并且您可以从任何控制器或视图访问它,因此无需通过(请参阅Josh's response)。
答案 1 :(得分:2)
对用户进行身份验证后,您可以使用HttpContext
获取基本用户信息。例如,您可以使用以下命令获取用户名:
string userName = HttpContext.User.Identity.Name;
您无需担心在控制器之间传递信息。只要用户经过验证,该信息就可用。
答案 2 :(得分:1)
在SuccessPage.Index操作中,获取用户的名称并通过模型将其传递到视图中。
要获取用户名,可以从保存的Session变量中获取,也可以使用controller.HttpContext.User.Identity.Name。
答案 3 :(得分: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不会持续刷新页面。