Доступ к текущему принципу IP в главном представлении в Asp.Net MVC - PullRequest
0 голосов
/ 21 мая 2010

В настоящее время у меня есть абстрактный класс контроллера, от которого унаследованы все мои контроллеры. Я хочу иметь возможность использовать объект текущего пользователя (IPrinciple) на моей главной странице. Я прочитал, что могу использовать конструктор моего абстрактного базового класса контроллера, то есть я могу сделать что-то вроде

public BaseController()
    {
        ViewData["UserName"] = this.User.Identity.Name;
    }

Затем я могу получить доступ к ViewData ["UserName"] и т. Д. С моей главной страницы. Моя проблема заключается в том, что this.User является нулевым в этой точке. Кто-нибудь знает другой подход?

Заранее спасибо.

1 Ответ

2 голосов
/ 21 мая 2010

Вы можете написать ActionFilter и в событии OnActionExecuted поместить пользователя внутрь ViewData:

public class UserActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        filterContext.Controller.ViewData["UserName"] = filterContext.HttpContext.User.Identity.Name;
    }
}

А затем украсьте свой базовый контроллер этим атрибутом:

[UserActionFilter]
public abstract class BaseController: Controller
{ }
...