ASP.NET MVC中的代码

时间:2008-09-20 14:35:11

标签: asp.net-mvc

除了设置ViewPage的泛型参数外,ASP.NET MVC中视图后面的代码的目的是什么?

6 个答案:

答案 0 :(得分:12)

以下是我从my own post获取代码隐藏的原因列表。我相信还有更多。

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

是!有些观点根本不需要代码隐藏。

是!除了.cs文件之外,还要创建一个愚蠢的.designer文件。

是!在每个视图旁边找到那些小+符号会很烦人。

但是 - 在代码隐藏中不要放置数据访问逻辑真的不难。

他们肯定不是evil

答案 1 :(得分:8)

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

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

如果答案是A,则它属于您的控制器。如果答案是B,则它属于视图。

如果B,它最终成为一种风格问题。如果你有一些相当长的条件操作试图弄清楚你是否向用户显示了某些东西,那么你可能会隐藏属性中后面代码中的那些条件操作。否则,似乎大多数人使用< %%>将代码内联到前端。和<%=%>标签。

最初,我将所有我的显示逻辑放在< %%>内。标签。但是最近我在我的代码中添加了任何杂乱的东西(例如冗长的条件)以保持我的XHML清洁。这里的诀窍是纪律 - 开始在后面的代码中编写业务逻辑非常诱人,这正是你在MVC中做的事情。

如果您正在尝试从传统的ASP.NET迁移到ASP.NET MVC,您可能会避免使用代码,直到您对这些实践有所了解(尽管它仍然不会阻止您将业务逻辑放入其中) < %%>。

答案 2 :(得分:3)

没有目的。除了设置模型

外,不要使用它
ViewPage<Model>

有关详细信息,请参阅this blogpost。

答案 3 :(得分:3)

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

答案 4 :(得分:0)

代码隐藏提供了一些强大的输入以及您在视图中获得的智能感知支持。如果您不关心这两个功能中的任何一个,则可以将其删除。

例如,我通常使用NVelocity ViewEngine,因为它干净且非常直接。

答案 5 :(得分:-1)

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

查看= aspx

Controller = aspx.cs(codebehind)

Model = POCO(普通的旧C#/ VB / .NET对象)

我想知道为什么MVC框架的附加功能会有所帮助。几年前(2001年)我在Java nd MVC和Java Struts上做了很多工作,发现MVC中的概念是当时Internet应用程序组织和开发问题的解决方案,但后来发现代码隐藏简化了控制器概念,更快地开发和与他人沟通。我相信其他人不同意我,我对其他想法持开放态度。我对MVC看到的最大价值是用于Internet开发的前端控制器模式,即Internet应用程序的单一入口源。但是,另一方面,使用当前的ASP.NET技术实现该模式相当简单。我听到其他人说单位测试是推理。我也能理解,我们在2001年使用了JUnit和我们的MVC框架;但我并不认为它简化了使用te MVC框架的测试。

感谢阅读!