1

是否可以在操作过滤器中将布局设置为空?例如

public ActionResult SomeAction()
    {
        return PartialView();
    }

我想渲染一些动作

@Html.Action("someaction")

它现在有效。

但我想在 2 种模式下使用这个动作:喜欢孩子和喜欢不同情况的主人。为此,我可以在视图中将 Layout 设置为 null

看法:

@{
   if(condtition)
   {
        Layout = null;
   }
}

但我想找到更优雅的方式:)

喜欢:

不偏不倚的行动

public ActionResult SomeAction()
        {
            return View();
        }

如果动作是子级,则在过滤器中将布局设置为 null

 public class LayoutFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
           if(filterContext.IsChildAction)
           {
               //set the layout to NULL here!

           }
        }
    }

有可能吗?有任何想法吗?

4

1 回答 1

3

在您的示例中,您已经覆盖了该OnActionExecuting事件,但这发生得太早了。这些操作甚至还没有执行,也没有返回一个 ActionResult 并且您已经在尝试设置它的布局。

等待它完成,通过覆盖OnActionExecuted事件,从 中检索 Result 属性filterContext,如果它是一个,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;
        }
    }
}
于 2013-07-22T20:13:48.320 回答