【发布时间】:2010-11-27 21:06:05
【问题描述】:
如何从视图访问控制器实例?例如。我有一个HomeController,然后返回我的Index 视图。在该视图内部,我想访问创建该视图的HomeController 实例。我该怎么做?
【问题讨论】:
-
这个问题的答案怎么不是“你不应该”(c.f. stackoverflow.com/q/9562214/1739000)?
标签: c# .net asp.net-mvc
如何从视图访问控制器实例?例如。我有一个HomeController,然后返回我的Index 视图。在该视图内部,我想访问创建该视图的HomeController 实例。我该怎么做?
【问题讨论】:
标签: c# .net asp.net-mvc
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) 方法来代替。此调用将触发该操作,就好像它是一个单独的请求一样,并将其视图作为主页的一部分。
这种方法将有助于强制执行关注点分离,因为重定向到的操作方法可以完成与表示规则相关的所有繁重工作。它需要返回一个局部视图才能在您的父视图中正常工作。
【讨论】:
在我看来,你应该考虑一个视图不需要知道控制器的设计。这个想法是控制器处理请求,变出一个模型并将该模型交给视图。至此,Controller 的工作就完成了。
如果 View 需要了解有关 Controller 的任何信息,我认为这表明存在设计缺陷。你能分享更多关于你想要完成的事情吗?
我经常发现,在处理设计良好的框架(例如 MVC 框架)时,如果感觉框架在与您作斗争,那么您可能以错误的方式处理任务。这在我身上发生过很多次,退一步问自己我真正想要完成的是什么往往会带来新的见解。
【讨论】: