我在问一个相关的问题,但混淆了标题,没有人会理解它。由于我现在可以更精确地提出这个问题,因此我决定在一个新问题中重新提出并关闭旧问题。对不起。为什么User(如User.Identity.Name)在我的抽象基础控制器中为空?
所以我想要做的是将数据(我的自定义用户的昵称存储在数据库中)传递给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;
}
}
这样,无论我派生Controller,用户信息已经存在。
到目前为止,这么好。现在的问题:
我不能说User.Identity.Name因为User
已经是空。在我的所有派生控制器中都不是这种情况,所以这是抽象基本控制器的特定情况。
我设置通过FormsAuthentication的User.Identity.Name在另一地点的代码,但我认为这不可能是问题 - 据我所知User.Identity.Name可以为空,但不是用户本身。
它看起来像我的HttpContext不可用(因为还空;-)和我缺少一个简单而重要的一点在这里。任何人都可以给我一些提示吗?我真的很感激。
奇怪,因为`User`为null,但`System.Web.HttpContext.Current.User`不是。 MVC 1.0 – 2009-10-22 18:57:15