Я задавал родственный вопрос, но перепутал название, и никто его не поймет. Поскольку я могу сейчас задать вопрос более точно, я решил переформулировать его в новом вопросе и закрыть старый. Извините за это.
Итак, я хочу передать данные (мой пользовательский псевдоним, хранящийся в db) в 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. Это не так во всех моих получающих контроллерах, поэтому это характерно для абстрактного базового контроллера.
Я устанавливаю User.Identity.Name через FormsAuthentication в другом месте в коде, но я думаю, что это не может быть проблемой. afaik User.Identity.Name может быть нулевым, но не самим пользователем.
Мне кажется, что HttpContext недоступен (так как также null;-) и что я пропустил простой, но важный момент здесь. Может ли кто-нибудь дать мне несколько советов? Я был бы очень признателен.