我如何从视图中访问控制器实例?例如,我有一个HomeController
,它返回我的Index
视图。在该视图中,我想访问创建视图的HomeController
实例。我该如何做到这一点?
我如何从视图中访问控制器实例?例如,我有一个HomeController
,它返回我的Index
视图。在该视图中,我想访问创建视图的HomeController
实例。我该如何做到这一点?
你需要访问 ViewContext.Controller,并且你需要进行强制转换。
<% var homeController = ViewContext.Controller as HomeController; %>
在Asp.Net MVC:如何获取当前控制器/视图的虚拟URL?中,这个问题还有一些额外的细节。
编辑:这是为了补充Mark Seemann的建议,尽可能将功能从视图中分离出来。如果您正在使用控制器来帮助确定呈现页面的标记,则可以使用Html.RenderAction(actionName, controllerName)
方法。此调用将触发操作,就像它是一个单独的请求,并将其视图作为主页面的一部分包含。
这种方法将有助于强制执行关注点分离,因为重定向到的操作方法可以完成所有与表示规则相关的繁重工作。它需要返回一个Partial View才能在父视图中正常工作。
在我看来,你应该考虑一种设计,其中视图不需要了解控制器。这个想法是,控制器处理请求,创建一个模型并将该模型交给视图。此时,控制器的工作完成了。
如果视图需要了解控制器的任何内容,我认为这表明存在设计缺陷。你能分享更多关于你尝试实现的目标吗?
我经常发现,在处理良好设计的框架(如MVC框架)时,如果感觉框架在跟你对抗,那么你可能正在错误的方式下进行任务。这种情况经常发生在我身上,退后一步并询问自己我真正想要达到什么通常会带来新的见解。