我在问一个相关的问题,但把标题弄乱了,没有人能理解。由于我现在能够更准确地提出问题,因此我决定将其重新表述为一个新问题并关闭旧问题。对此感到抱歉。
所以我想要做的是将数据(存储在数据库中的我的自定义用户昵称)传递给 LoginUserControl。这个登录是通过 Html.RenderPartial() 从母版页呈现的,所以我真正需要做的是确保每次调用都存在 ViewData["UserNickname"]。但我不想在每个控制器的每一个动作中填充 ViewData["UserNickname"],所以我决定使用这种方法并创建一个抽象的基础控制器来为我完成工作,如下所示:
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 ;-),而且我在这里遗漏了一个简单但重要的观点。谁能给我一些提示?我真的很感激。