视图应该依赖于其控制器吗? (ASP.NET MVC)

时间:2009-11-04 14:23:26

标签: asp.net-mvc view controller

在这里对asp.net mvc的设计/使用有疑问。

在html帮助器类中,您可以通过Html.ViewContext.Controller访问当前控制器。此外,您可以从html帮助程序类获取请求,路径集合等等。

这不违反MVC规则吗?这不是为开发人员开辟了一种在视图中执行重度控制器相关代码的方法吗?

如果没有,那么html帮助程序类中当前viewcontext和controller的最佳实践用例是什么?

提前致谢。

3 个答案:

答案 0 :(得分:8)

使用强类型的ViewModel,因此您的视图仅依赖于它而不是生成它的控制器

答案 1 :(得分:4)

  

这不符合MVC规则吗?

是的,它会。

  

这是不是开辟了开发人员在视图中执行重度控制器相关代码的方法?

是的,它打开那扇门。需要避免。

  

html帮助程序类中当前viewcontext和controller的最佳实践用例是什么?

最佳做法是编写不知道控制器和上下文的Html帮助程序。他们应该只根据调用者提供的数据来完成他们的工作。

然而,在极少数情况下,您可能希望开箱即用。例如,我写了一个帮助器,它将呈现Html元素并自动添加ID。在这种情况下,帮助程序应该在某处保留有关先前使用的ID值的信息。例如,您可能希望在ViewContext中存储该值。

但是,当你清楚地了解你这样做的原因和原因时,你应该只做这些事情。

答案 2 :(得分:0)

简单的答案是否定的,一般来说视图不应该依赖于控制器。

详细说明已经说过的话;如果你不小心的话,有很多方法可以使用ASP.Net MVC射击自己。基本概念有所帮助,但没有办法让它变得万无一失,并且仍然保持足够的灵活性以便被认为是有用的。

如果您愿意,您可以直接在视图中进行数据访问而不会遇到太多麻烦,或者您可以将模型绑定到Web会话等。就像任何事情一样,您可能无法在第一时间做到正确,但是您会学习。