在动作过滤器中将布局设置为null是否可行?例如
public ActionResult SomeAction()
{
return PartialView();
}
我想用
渲染一些动作@Html.Action("someaction")
现在有效。
但是我想在两种模式下使用这个动作:像孩子一样,不同情况下的主人。我可以在此视图中将Layout设置为null
视图:
@{
if(condtition)
{
Layout = null;
}
}
但我想找到更优雅的方式:)
像:
没有部分
的行动public ActionResult SomeAction()
{
return View();
}
并在过滤器中将布局设置为null,如果action为child
public class LayoutFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(filterContext.IsChildAction)
{
//set the layout to NULL here!
}
}
}
有可能吗?有什么想法吗?
答案 0 :(得分:3)
在您的示例中,您已覆盖OnActionExecuting
事件,但这种情况发生得太早。这些动作甚至还没有执行,也没有返回ActionResult,你已经在尝试设置它的布局了。
等待它完成,通过覆盖OnActionExecuted
事件,从filterContext
检索Result属性,如果它是ViewResult
,则将其MasterName
属性设置为null :
public class LayoutFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var result = filterContext.Result as ViewResult;
if (result != null)
{
result.MasterName = null;
}
}
}