我之前提出了一个相关的问题,但标题搞错了,没人能理解。现在我已经能够更准确地提出问题,所以我决定重新制定一个新的问题,并关闭旧的问题。对此我感到抱歉。
所以我的问题是如何将数据(存储在数据库中的自定义用户昵称)传递给 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
已经是null了。这并不是我所有的派生控制器中都存在的情况,所以这只适用于抽象基本控制器。
我通过代码中的另一个地方使用FormsAuthentication设置了User.Identity.Name
,但我认为这不可能是问题——据我所知,User.Identity.Name
可以为null,但User本身不可以。
在我看来,HttpContext不可用(也是null),我在这里错过了一个简单而重要的点。有人能给我一些提示吗?我真的会非常感激。
User
为空,但System.Web.HttpContext.Current.User
不是空的。MVC 1.0。 - Eduardo Molteni