gpt4 book ai didi

asp.net-mvc - ControllerContext 为 null 并且在使用 Html.Action 时未调用 BaseController.OnActionExecuting()

转载 作者:行者123 更新时间:2023-12-04 19:44:39 24 4
gpt4 key购买 nike

我们使用 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;

...
}
}

我们的子 Controller 有一个针对主页的操作 (Index) 和一个局部 View (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);
}
}

并且局部 View 直接用Html.Action()渲染:

@Html.Action(MVC.Collaboration.GetNavigation())

似乎它应该工作,但 BaseController.OnActionExecuting 没有被调用。而且我什至不能直接调用它,因为 this.ControllerContextbase.User 都是 null。我还尝试了子类化 ActionFilterAttribute,但它的 OnActionExecuting 方法也没有被调用。

最佳答案

我知道这是一个老问题,但我是这样处理的。在我的子 Controller 中,我创建了 OnActionExecuting 方法并从那里调用基本 Controller 。

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
}

关于asp.net-mvc - ControllerContext 为 null 并且在使用 Html.Action 时未调用 BaseController.OnActionExecuting(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7433662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com