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