2013-02-22 215 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

相关问题