2008-09-20 65 views

回答

12

这里是我的原因代码隐藏可能是有用的名单从my own post采取我敢肯定还有更多

  • 传统的数据绑定ASP.NET控件 - 。如果替代方案不可用或需要临时解决方案
  • 查看lo gic需要递归来创建某种嵌套或分层的HTML。
  • 查看使用临时变量的逻辑。我拒绝在我的标签汤中定义局部变量!我至少希望它们作为视图类的属性。
  • 只针对一个视图或模型并且不属于HtmlHelper的逻辑。作为旁注,我不认为HtmlHelper应该知道任何'Model'类。它很好,如果它知道模型中定义的类(如IEnumerable,但我不认为你应该有一个HtmlHelper需要一个ProductModel。 HtmlHelper方法最终变得可见所有你的意见,当你键入Html +点,我真的想尽量减少这个列表
  • 如果我想编写使用HtmlGenericControl和其他类在该名称空间的代码以面向对象的方式生成我的HTML(或者我有现有的代码那我想要移植它
  • 如果我打算在未来使用不同的视图引擎,我可能会想要保留一些逻辑以避免使用标记汤,以便以后再使用它更容易
  • 如果我想能够怎么办重命名我的模型类,让它自动重构我的视图,而无需转到view.aspx并更改类名称。
  • 如果我正在与一个HTML设计师进行协调,我不相信不会搞乱'标签汤',并且想要在.aspx.cs文件中非常基本的循环之外编写任何东西。
  • 如果您想根据视图的默认排序选项对数据进行排序。如果您有多个只能从视图访问的排序选项,我真的不认为控制器应该为您排序数据。
  • 您实际上想要在代码中调试视图逻辑,该视图逻辑看起来像是真正的.cs而不是HTML。
  • 您希望编写可能稍后分解并在其他地方重用的代码 - 您现在还不确定。
  • 您想要将可能成为新的HtmlHelper的原型原型化,但您尚未确定其通用性是否足以保证创建HtmlHelper。 (基本上与前一点相同)
  • 您希望创建一个助手方法来呈现局部视图,但需要通过从主页视图中提取数据并为其创建部分控制的模型来为其创建模型基于当前的循环迭代。
  • 您认为在单一功能中编程复杂的逻辑是过时的和不可维护的做法。
  • 你在RC1之前做过,没有遇到任何问题!

是的!一些视图根本不需要隐藏代码。

是的!它吸引得到一个愚蠢的.designer文件除了.cs文件创建。

是的!这种烦人的做法是让每个视图旁边的那些小小的符号变得简单。

但是 - 在代码隐藏中实现数据访问逻辑并不难。它们当然不是evil

3

没有目的。只要不使用它,除非要设置模型

ViewPage<Model> 

this博文以获得更多信息。

+0

即使设置模型,也可以在不使用代码隐藏文件的情况下通过使用丑陋的语法来完成,例如ViewPage`1 [Model] :) – 2008-09-21 19:47:25

+0

有很多目的。看到我的帖子下面。顺便说一下,这篇博文的作者自己说他们称之为“邪恶”的噱头让人们注意。他们绝对不是邪恶的。我不能等待看到一些可怕的标签汤,这将导致人们试图遵循这种模式 – 2009-02-09 05:23:47

-1

这是一个很好的问题。不使用特定的MVC模式,ASP.NET环境中不存在MVC。

查看= ASPX

控制器= aspx.cs(代码隐藏)

模型= POCO(普通老式C#/ VB/.NET对象)

我不知道为什么的附加功能MVC框架很有帮助。几年前(2001年),我与Java nd MVC和Java Struts一起工作过,并发现MVC中的概念是当时互联网应用程序组织和开发问题的解决方案,但后来发现代码隐藏简化了控制器概念,更快地开发并与他人沟通。我确信其他人不同意我的观点,我愿意接受其他观点。我看到MVC的最大价值在于互联网应用的前端控制器模式,即互联网应用的单一入口源。但另一方面,使用当前的ASP.NET技术实现该模式相当简单。我听到别人说单元测试是推理。我也可以理解,我们在2001年使用了JUnit和我们的MVC框架;但我还没有确信它简化了使用te MVC框架的测试。

感谢您的阅读!

+0

在ASP.NET MVC中,View是一个带有代码隐藏(aspx.cs)的aspx页面,并且控制器通常位于其他地方(SomeController.cs)。 – Casper 2008-09-20 15:02:46

+1

普通的旧ASP.NET不是MVC。代码隐藏映射到控制器和模型,控制器和视图完全绑定在一起。 MVC的全部要点是将控制器和视图分离,因此一个控制器可以有多个不同的视图,或者一个视图可以处理多个控制器。 – 2008-09-20 15:34:35

3

this Blogpost是删除后面的代码的工作示例。 我遇到的唯一问题是它无法在类上设置命名空间。

0

代码隐藏提供了一些强类型以及在视图中获得的intellisense支持。如果您不关心这两项功能中的任何一项,则可以将其删除。

例如,我通常使用NVelocity ViewEngine,因为它非常简洁明了。

8

最终,你会问自己的问题是:

此代码是否A)处理,存储,检索,执行上的操作或分析数据,或B)帮助显示的数据?

如果答案是A,它就属于你的控制器。如果答案是B,那么它属于视图。

如果B,它最终成为风格的问题。如果您有一些相当长的条件操作来确定是否向用户显示某些内容,那么您可能会将这些条件操作隐藏在属性后面的代码中。否则,似乎大多数人都会使用<%>和<%=%>标签将代码在线排到前端。

本来我把全部我的显示逻辑里面的<%>标签。但最近我已经开始在我的代码中放置任何杂乱的东西(比如冗长的条件),以保持我的XHML清洁。这里的诀窍是纪律 - 开始在后面的代码中写入业务逻辑是非常诱人的,这正是你应该在MVC中做的而不是

如果您试图从传统的ASP.NET转移到ASP.NET MVC,您可能会拖延代码,直到您对实践有所感觉(尽管它仍然不会阻止您将业务逻辑放入内部。在<%%>