我有两个部分视图呈现在页面上,
@{Html.RenderAction("SalesDashboard", "Dashboard");}
@{Html.RenderAction("MarketDashboard", "Dashboard");}
然后在我的控制器
[ChildActionOnly]
public PartialViewResult SalesDashboard()
{
return PartialView("_SalesDashboard");
}
[ChildActionOnly]
public PartialViewResult MarketDashboard()
{
return PartialView("_MarketDashboard");
}
这很好。现在我想检查用户是否有权限查看那个部分视图。所以我想检查ActionFilter onactionexecution
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.IsChildAction) //How to get the partial view request here, I mean the controller name and action method
{
//business logic
}
int reqCnt = SessionMenu.Menus.FindIndex(i=> i.AccessPath == filterContext.HttpContext.Request.Url.PathAndQuery);
if (reqCnt <= 0)
{
//business logic
}
}
我想在我的过滤器中获得部分viewrequest路径。任何帮助都是感激的。提前感谢
请检查更新的动作过滤器,
if (filterContext.IsChildAction)
{
string cName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
string aMthod = filterContext.ActionDescriptor.ActionName;
int i = SessionMenu.Menus.FindIndex(item => item.AccessPath == "/"+ cName +"/"+aMthod );
if (i <= 0)
{
filterContext.Result = null;
}
}
filterContext。当用户没有部分请求的权限时,结果为空,但部分视图仍然加载。我应该在控制器/视图中检查什么来隐藏/阻止加载部分视图?
您可以在
中找到部分操作名称filterContext.ActionDescriptor.ActionName
和
中的部分控制器名称filterContext.ActionDescriptor.ControllerDescriptor.ControllerName
和"主视图"数据可以在filterContext.HttpContext.Request.RequestContext.RouteDate
为例
编辑
然后,要跳过执行,您可以执行
filterContext.Result = new EmptyResult();
return;
代替filterContext.Result = null;
如果你想在你的过滤器中获得控制器和动作名称,你可以这样做:
string actionName = filterContext.ActionDescriptor.ActionName;
string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName
ChildActions在一个动作中执行。您还使用了Attribute ChildActionOnly,这使得它不可用,直到这些子操作所处的操作执行。所以你只需要确保你的主要动作。
如果你想根据权限呈现子操作,你需要在视图中这样处理它:
@if(HttpContext.Current.User.IsInRole("RoleName"))
{
@Html.RenderAction("SalesDashboard", "Dashboard")
@{Html.RenderAction("MarketDashboard", "Dashboard");}
}
@if(HttpContext.Current.User.IsInRole("RoleName"))
{
@Html.RenderAction("MarketDashboard", "Dashboard");
}