在控制器中检测视图或部分视图

6
在控制器中,我能否检测我是否正在“控制”视图或局部视图?
我有一个共享控制器,它位于任何控制器和Controller之间,如果是视图而不是局部视图,我只想发生某些事情。
理想情况下,在protected override ViewResult View(...中。

在什么情况下你不会已经知道这个呢? - GalacticCowboy
2个回答

10

检查您的 Action 方法中的 ControllerContext.IsChildAction,或者在 OnActionExecuted 中检查 filterContext.IsChildAction。


非常好的函数。这个函数在我的代码中为我节省了很多处理时间,因为我有一个BaseController,所有的控制器都继承自它,在我的BaseController中,我在Initialize函数中创建了我的菜单。在这种情况下,当我的视图有3个部分视图时,菜单会被构建3次。现在我可以检查IsChildAction是否为false来构建菜单,就这样!谢谢。 - Samuel
只有在视图中调用 Partial 才有效。如果直接从路由调用 Action,则无效。我使用 MVC 渲染部分视图以供弹出窗口使用,并直接调用它们。 - seebiscuit

1

针对每个路由设置不同的路径。 /home/about 和 /home/about/partial 两者都将路由到同一个控制器方法。基本上,不要试图四处嗅探东西,而是通过路由或参数显式地表达。


因为这太庞大了,而且我并不想进行后期改造,涉及到解决方案中的每个路由都要更改。 - NikolaiDante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接