ASP.NET中的<script>标记有多强大?</script>

时间:2010-03-31 13:29:00

标签: c# .net asp.net code-behind

我是使用.NET进行Web开发的新手,我正在研究一个页面,其中我有两个独立的代码隐藏(在我的例子中,是一个与ASPX文件关联的.CS文件),以及内部的代码隐藏ASPX文件里面的标签如下:

<script runat="server">
//code
</script>

Q1 :主要区别是什么(除了组织,可读性和ETC之类的逻辑问题),可以通过一种无法在另一种方式完成的方式做什么?每种模式最适合什么?

Q2 :如果我要开发一个包含数据库连接的简单页面,库导入,访问控件(ascx)和其他文件夹中的图像访问..我应该选择哪种方法? / p>

6 个答案:

答案 0 :(得分:3)

您可以在代码隐藏中执行任何操作,您可以在内联脚本中执行,例如您发布的内容。但是你应该在大多数时候使用代码隐藏。有些东西(比如使用指令)在那里稍微容易一些,它有助于保持代码的有序性。

答案 1 :(得分:2)

Q1 :没什么。除了你和其他人提到的内容(分离,可读性)之外,你可以做一切“代码隐藏”可以用“内联”(页面本身的代码)编码。

内联编码并不一定意味着它像“意大利面条代码”,其中UI和代码混合在一起(如旧式ASP)。您的所有代码都可以在UI / HTML之外生存,但仍然是内联的。您可以将所有代码隐藏代码复制/粘贴到内联页面中并进行一些调整(布线,命名空间,导入声明等),就是这样。

其他评论触手可及:便携性和快速修复/修改。 根据您的使用情况,您可能不希望某些代码段暴露(专有),但可以使用。这对于Web开发人员来说很常见。内联代码允许您的客户以他们想要的方式快速/轻松地自定义功能,并且可以随时使用您的(专有)库(dll),而不必是代码运行(如果他们是,他们不会先雇用了你)。

所以实际上,它就像向客户端发送一个“html”文件,其中包含有关如何更改内容(不破坏内容)的说明...而不是发送源代码文件以及html(aspx)页面和希望你的客户知道如何处理它们......

Q2 :虽然任何一种样式(内联或代码隐藏)都可以使用,但实际上是在“层”中查看应用程序。通常,它将是:UI,业务逻辑和数据层。以这种方式思考将为您节省大量时间。

实际例子:

  • 如果您的Web应用程序的多个页面必须公开/访问数据,那么拥有数据层是最佳方法。实际上,即使您目前有1页需求,也可能永远不会保持这种状态,所以将其视为最佳实践。
  • 如果您的网络应用程序的多个页面将收集用户的输入(即联系我们,注册/注册等),那么您可能需要验证输入。因此,不是逐页地执行此操作,而是使用通用输入验证库来节省时间,并减少所需的代码量。

在上面的示例中,您已将大量处理“分离”到自己的层中。然后,您的单个html / aspx页面可以使用“代码库”(数据和输入验证)快速使用“页面级别”的最少代码。然后,在“页面级别”使用内联或代码隐藏样式的决定并不重要 - 你基本上“愚弄”到当时的用例。

希望这会有所帮助......

答案 2 :(得分:0)

保持分开。使用.aspx页面进行布局,使用.aspx.cs页面查找任何特定于页面的代码,并优先将数据访问/业务逻辑拉出到自己的层中,以便以后更简单的维护/重用。


那里有一点点警告 - ASP.net MVC在它的视图中使用内联脚本,我真的想到了这个想法 - 它可以保持简单的东西简单,但MVC中使用的架构确保您的业务代码保持独立来自您的演示代码。

答案 3 :(得分:0)

我并不是说你应该破解实时代码...但是将“代码隐藏”作为内联脚本的一点灵活性就是你可以在不必重建/发布网站的情况下破解变更

就我个人而言,我从来没有这样做,但我听说过人们已经做过这样的事情来进行紧急救援。

答案 4 :(得分:0)

脚本标记和后面的代码没有区别。后面的代码选项实际上是使用脚本标记或“经典ASP”中的<% %>。许多开发人员不喜欢他们的服务器端代码位于UI代码旁边这一事实,因为它使文件看起来很混乱,而且HTML人员(网页设计师或任何你想要的东西)要困难得多。称他们为同时与开发人员在同一页面上开发。

大多数人喜欢使用后面的代码选项(它实际上被认为是标准的处理方式),因为它保持UI和代码分离。这是我喜欢的,但你真的可以使用它。

答案 5 :(得分:0)

  1. 你可以使用所有相同的东西
  2. 除非您有令人信服的理由不
  3. ,否则请始终尝试保持代码分开

    有趣的是,我今天在前面的代码中使用了<script runat="server">!我这样做是因为您不需要构建整个Web应用程序来部署需要代码的修复程序。是的 - 这是一个错误修复;)