如何从视图中访问控制器实例?例如。我有一个HomeController
,然后返回我的Index
视图。在该视图内部,我想访问创建视图的HomeController
实例。我该怎么做?
答案 0 :(得分:75)
ViewContext.Controller,你需要施放它。
<% var homeController = ViewContext.Controller as HomeController; %>
在帖子Asp.Net MVC: How do I get virtual url for the current controller/view?中有一些额外的皱纹。
编辑:这是为Mark Seemann的建议添加一些内容,即尽可能地将功能保留在视图之外。如果您使用控制器来帮助确定呈现页面的标记,则可能需要使用Html.RenderAction(actionName, controllerName)
方法。此调用将触发该操作,就好像它是一个单独的请求,并将其视图作为主页的一部分包含在内。
这种方法有助于强制执行关注点分离,因为重定向到的操作方法可以完成与表示规则相关的所有繁重工作。它需要返回一个部分视图才能在父视图中正常工作。
答案 1 :(得分:29)
在我看来,您应该考虑View不需要了解Controller的设计。想法是控制器处理请求,召唤一个模型并将模型交给View。那时,控制器的工作已经完成。
如果View需要了解有关Controller的任何信息,我认为这表明存在设计缺陷。你能分享更多关于你想要完成的事情吗?
我经常发现,在处理设计良好的框架(例如MVC框架)时,如果感觉框架正在打击你,那么你可能会以错误的方式处理任务。这种情况在我身上发生了很多,并且退后一步,问自己我真正想要完成的是什么,这往往会带来新的见解。