Мы используем BaseController
для кэширования базовой информации аутентификации перед выполнением каждого действия:
public abstract class BaseController : Controller
{
protected bool IsLoggedIn { get; set; }
protected string Username { get; set; }
...
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var identity = base.User.Identity;
this.IsLoggedIn = identity.IsAuthenticated;
this.Username = identity.Name;
...
}
}
А у нашего дочернего контроллера есть действия для главной страницы (индекс) и частичного представления (GetNavigation):
[Authorize]
public partial class CollaborationController : BaseController
{
[HttpGet]
public virtual ViewResult Index()
{
var viewModel = this.MakeViewModel<FullPageViewModel>();
return this.View(MVC.Collaboration.Views.Index, viewModel);
}
[HttpGet]
public virtual PartialViewResult GetNavigation()
{
var viewModel = NavigationViewModel.Make(this.User);
return this.PartialView(MVC.Collaboration.Views.Navigation, viewModel);
}
}
И частичное представление отображается непосредственно с помощью Html.Action()
:
@Html.Action(MVC.Collaboration.GetNavigation())
Кажется, что это должно работать, но BaseController.OnActionExecuting
не вызывается.И я даже не могу назвать это напрямую, потому что this.ControllerContext
и base.User
оба null
.Я также попытался создать подкласс ActionFilterAttribute
, но его метод OnActionExecuting также не вызывается.