代码之家  ›  专栏  ›  技术社区  ›  alex

ASP.NET MVC中的代码隐藏

  •  9
  • alex  · 技术社区  · 17 年前

    除了设置viewpage的通用参数外,ASP.NET MVC中的代码隐藏视图文件的目的是什么?

    6 回复  |  直到 17 年前
        1
  •  12
  •   Community Mohan Dere    9 年前

    以下是我列出的代码隐藏的有用原因 my own post . 我相信还有很多。

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

    对!有些视图根本不需要代码隐藏。

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

    对!把这些小+符号放在每个视图旁边有点烦人。

    但是 -不把数据访问逻辑放在代码后面其实并不难。

    他们肯定不是 evil .

        2
  •  8
  •   Matt    17 年前

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

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

    如果答案是,则它属于控制器。如果答案是b,那么它属于视图中。

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

    最初,我把 全部的 我在<%%>标记内的显示逻辑。但最近,我已经开始在代码中放置任何杂乱的内容(比如冗长的条件),以保持XHTML的整洁。这里的诀窍是规范——在代码背后开始编写业务逻辑太诱人了,这正是您应该做的。 在MVC工作。

    如果您试图从传统的ASP.NET转移到ASP.NET MVC,则可能会在对实践有感觉之前避免代码滞后(尽管它仍然不会阻止您将业务逻辑放入<%%>。

        3
  •  3
  •   Casper    17 年前

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

    ViewPage<Model>
    

    this blogpost了解更多信息。

        4
  •  3
  •   Paco    17 年前

    AT this Blogpost 是删除代码隐藏的一个工作示例。 唯一的问题是它不能在类上设置名称空间。

        5
  •  0
  •   Javier Lozano    17 年前

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

    例如,我通常使用Nvelocity ViewEngine,因为它是干净的,并且非常直接。

        6
  •  -1
  •   user16651    17 年前

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

    视图= ASPX

    控制器=aspx.cs(codebehind)

    model=poco(普通的旧c/vb/.net对象)

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

    谢谢你的阅读!