0

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

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

}

现在我想在重定向视图(即/SuccessPage/Index)上显示用户名。我怎样才能做到这一点 ?

4

4 回答 4

3

您可以在重定向中传递参数。

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

显然,控制器动作需要访问用户名属性才能传递值

注意:上面的示例有助于理解如何在重定向中传递附加参数,但在这种情况下,它是多余的,因为User.Identity.Name一旦用户经过身份验证,它就可以在会话中使用,并且您可以从任何控制器或视图访问它,因此无需通过(见乔希的回应)。

于 2013-02-22T19:30:27.097 回答
2

用户通过身份验证后,您可以使用HttpContext获取基本用户信息。例如,您可以使用以下内容获取用户名:

string userName = HttpContext.User.Identity.Name;

您无需担心在控制器之间传递信息。只要用户通过身份验证,该信息就可用。

于 2013-02-22T19:37:47.990 回答
1

在 SuccessPage.Index 操作中,获取用户名并通过模型将其传递到视图中。

要获取用户名,可以从保存的 Session 变量中获取,也可以使用 controller.HttpContext.User.Identity.Name。

于 2013-02-22T19:39:47.110 回答
1

如果我们只是在讨论传递数据,您有 4 个选项。(如果我们只讨论用户名,那么您需要Josh 的回复

在重定向中传递参数(正如杰克建议的那样)

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

于 2013-02-22T19:41:43.457 回答