将数据传递到另一个视图

时间:2013-02-22 19:26:16

标签: c# asp.net-mvc

如果用户登录有效,我会将视图重定向到另一个视图,如下所示。以下方法位于Controller类中。

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

}

现在我想在重定向的视图上显示用户名(/SuccessPage/Index)。我怎么能这样做?

4 个答案:

答案 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不会持续刷新页面。