时,我们使用一个BaseController
之前,每一个动作执行缓存基本验证信息:ControllerContext是零和BaseController.OnActionExecuting()不叫使用Html.Action
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方法也没有被调用。
还应该注意到我们正在使用MVCContrib – amoss
您是否更新了T4MVC模板? –
是的,这些都是最新的。事实证明,MVCContrib html helper是罪魁祸首。它确实调用了操作,但是使用null控制器上下文。我切换到@ Html.Action(“GetNavigation”,“Collaboration”),一切正常。 – amoss