我有两个部分视图在页面上呈现,
@{Html.RenderAction("SalesDashboard", "Dashboard");}
@{Html.RenderAction("MarketDashboard", "Dashboard");}
然后在我的控制器中
[ChildActionOnly]
public PartialViewResult SalesDashboard()
{
return PartialView("_SalesDashboard");
}
[ChildActionOnly]
public PartialViewResult MarketDashboard()
{
return PartialView("_MarketDashboard");
}
这很好用。现在我想检查用户是否有权查看该部分视图。所以我想查看我的ActionFilter OnActionExecuting。
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.Result为null,但部分视图仍会加载。我应该在我的控制器/视图中检查什么来隐藏/阻止加载局部视图?
答案 0 :(得分:1)
您可以在
中找到部分操作名称filterContext.ActionDescriptor.ActionName
和
中的部分控制器名称filterContext.ActionDescriptor.ControllerDescriptor.ControllerName
和&#34;主视图&#34;数据可以在
例如filterContext.HttpContext.Request.RequestContext.RouteDate
修改强>
然后,要跳过执行,你可以
filterContext.Result = new EmptyResult();
return;
而不是filterContext.Result = null;
答案 1 :(得分:0)
如果您想在过滤器中获取控制器和操作名称,可以执行以下操作:
string actionName = filterContext.ActionDescriptor.ActionName;
string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName
答案 2 :(得分:0)
ChildActions在行动中被执行。你还使用了属性ChildActionOnly,这使得它不可用,直到这些childacions将执行的动作。所以你只需要确保你的主要行动。
如果您想基于权限呈现子操作,则需要在以下视图上处理它:
@if(HttpContext.Current.User.IsInRole("RoleName"))
{
@Html.RenderAction("SalesDashboard", "Dashboard")
@{Html.RenderAction("MarketDashboard", "Dashboard");}
}
@if(HttpContext.Current.User.IsInRole("RoleName"))
{
@Html.RenderAction("MarketDashboard", "Dashboard");
}