【发布时间】:2009-01-10 07:27:26
【问题描述】:
我在问一个相关的问题,但把标题弄乱了,没有人能理解。由于我现在能够更准确地提出问题,因此我决定将其重新表述为一个新问题并关闭旧问题。很抱歉。
所以我想要做的是将数据(存储在数据库中的我的自定义用户昵称)传递给 LoginUserControl。这个登录是通过 Html.RenderPartial() 从母版页呈现的,所以我真正需要做的是确保每次调用都存在 ViewData["UserNickname"]。但我不想在每个控制器的每一个动作中填充 ViewData["UserNickname"],所以我决定使用 this approach 并创建一个抽象的基础控制器来为我完成工作,如下所示:
public abstract class ApplicationController : Controller
{
private IUserRepository _repUser;
public ApplicationController()
{
_repUser = RepositoryFactory.getUserRepository();
var loggedInUser = _repUser.FindById(User.Identity.Name); //Problem!
ViewData["LoggedInUser"] = loggedInUser;
}
}
这样,无论我的派生控制器做什么,用户信息都已经存在。
到目前为止,一切都很好。现在解决问题:
我无法调用 User.Identity.Name,因为 User 已经为空。我的所有派生控制器都不是这种情况,因此这是特定于抽象基础控制器的。
我在代码中的另一个位置通过 FormsAuthentication 设置 User.Identity.Name,但我认为这不是问题 - afaik User.Identity.Name 可以为空,但不是用户本身。
在我看来 HttpContext 不可用(因为也是 null ;-),我在这里遗漏了一个简单但重要的点。谁能给我一些提示?我真的很感激。
【问题讨论】:
标签: c# asp.net-mvc controller user-controls httpcontext