ASP.NET MVC:从视图访问控制器实例

Ale*_*lex 43 .net c# asp.net-mvc

如何从视图中访问控制器实例?例如,我有一个HomeController然后返回我的Index视图.在该视图内部,我想访问HomeController创建视图的实例.我怎么做?

Dav*_*res 76

ViewContext.Controller,你需要投射它.

<% var homeController = ViewContext.Controller as HomeController; %>
Run Code Online (Sandbox Code Playgroud)

Asp.Net MVC后面有一些额外的皱纹:如何获取当前控制器/视图的虚拟URL?.

编辑:这是为了向Mark Seemann的建议添加一些内容,即尽可能地将功能保留在视图之外.如果您使用控制器来帮助确定呈现页面的标记,则可能需要使用该Html.RenderAction(actionName, controllerName)方法.此调用将触发该操作,就好像它是一个单独的请求并将其视图作为主页的一部分包含在内.

这种方法将有助于强制执行关注点分离,因为重定向到的操作方法可以完成关于表示规则的所有繁重工作.它需要返回一个部分视图才能在父视图中正常工作.


Mar*_*ann 30

在我看来,你应该考虑一个View不需要了解Controller的设计.想法是控制器处理请求,召唤一个模型并将模型交给View.那时,Controller的工作已经完成.

如果View需要了解Controller的任何信息,我认为这表明存在设计缺陷.你能分享一下你想要完成的事情吗?

我经常发现,在处理设计良好的框架(例如MVC框架)时,如果感觉框架正在打击你,那么你可能会以错误的方式执行任务.这种情况在我身上发生了很多,并且退后一步,问自己我真正想要完成的是什么,这往往会带来新的见解.