【问题标题】:Response.Write outdated?Response.Write 过时了?
【发布时间】:2010-10-29 20:02:15
【问题描述】:

我最近进行了一次求职面试的技术测试,我在其中进行了 Response.Write()。有人告诉我这是“过时的”,现在有更好的方法可以做到这一点。面试官不会详细说明,所以我很想知道他指的是什么。有人有什么想法吗?

【问题讨论】:

  • 你应该知道所有的 asp.net 服务器控件都使用 Response.Write 在幕后发出它们的 HTML 代码......这就是它的用途。

标签: c# asp.net


【解决方案1】:

Response.Write 很棒,如果页面上的所有内容都是由它发送的。当我必须使用 ASPX 提供即时生成的非 HTML 文件时,我会使用它。

如果您使用的是非空的 ASPX 页面,Response.Write 根本没有任何意义。

【讨论】:

  • ^-- 这个。只有当 R-dot-W 本质上只是将数据移动到输出流时,我才觉得使用它还不错,即使这样,只有当进入它的数据来自像 XSLT 转换或某些序列化这样的干净源时,即不是一堆硬编码的html字符串。
  • 在这种情况下您不应该使用通用处理程序来避免事件链开销吗?
  • @ChaosPandion,如果你的意思是 IHttpHandler,我必须同意。
【解决方案2】:

在 aspx - 内联服务器脚本标签中:

<%= SomeProperty.Name %>

在代码中 - 这取决于具体情况,但通常有更好的选择,例如 HtmlTextWriter、ScriptManager(用于注册脚本)、文字控件、占位符或其他东西。

【讨论】:

  • annakata: true 但在 aspx 中看起来好多了。并且就其性质而言,您不能在代码中使用它。
  • 我对此并不疯狂。我更喜欢使用 SomeProperty.Name 一次填写 asp:label 或 asp:literal 并进行适当检查。 SomeProperty 可能为空,然后你会追逐一个令人沮丧的错误
【解决方案3】:

还有很多其他方法。我避免使用 Response.Write,因为它取决于将内容写入输出的确切顺序。例如,我宁愿使用 Literal 控件并为其 Text 属性分配一个值。

我通常也尽量避免 内联语句,因为我喜欢让 aspx 页面只包含页面结构,并在代码隐藏中保留服务器端代码语句文件。

【讨论】:

  • 需要注意的一点是,随着 ASP.NET MVC 的出现,使用 和 再次成为一种公认的做法。
  • @DrJokepu:好点,我注意到了。不确定我个人是否喜欢它,但是我还没有真正深入研究 ASP.NET MVC。我可能会让自己大吃一惊:)
  • 一旦你接触到 ASP/MVC,它立刻感觉更像是一种模板语言(类似于 XSLT 或 JSP),这是一个使用
  • @annakata - 我想应该试一试,也许是时候重建我的网站了...
【解决方案4】:

取决于您的应用程序。请记住,您的 .aspx 文件中的 仍然是 Response.Write() 的快捷方式

如果您使用 Response.Write() 函数渲染所有 HTML,那么是的,也许他是对的。但是如果你用它来做内联代码,那其实还可以。

【讨论】:

    【解决方案5】:

    除非该方法被标记为过时,否则我不会关闭它。它当然不是“老式的”。但在某些情况下,可能会有更好的替代方案,因为它们更易于维护。

    例如,您可以考虑在 HTML 中编写一堆 &lt;%= %&gt; 语句,但这是与 HttpResponse.Write 同时引入的,因此如果其中一个是“老式”的,那么它们都是。

    您可能还想考虑在其他情况下使用模板引擎。这一切都取决于。

    如果你的面试官不想详细说明,那也说明了面试官的一些情况。

    【讨论】:

      【解决方案6】:

      ASP.Net 页面是一个高度结构化的软件,由负责提供自己的输出的控制层次结构组成。在这种制度下,Response.Write 似乎已经过时了,因为它让人回想起原始的 ASP 页面,所有内容都是内联呈现的。

      现代页面只是更新呈现自己的输出的控件的属性。 Response.Write 通过中断控制输出流来打破层次结构。

      【讨论】:

      • +1 - 在这种情况下,他们确实应该使用通用处理程序。
      【解决方案7】:

      我不认为“老式”是面试官真正想说的正确术语。根据上下文,可能有更好的方法可以使用。如果您使用内联脚本标签,例如 Jason 的示例,那么 &lt;%= 约定可能更适合该任务。但是,如果您执行任何类型的视图逻辑,&lt;% if (*conditional*) { ... } %&gt;,那么您的替代方案可能会受到限制。

      【讨论】:

        【解决方案8】:

        这完全取决于您使用 Response.Write 的目的。

        如果要输出一个字符串以显示到页面上,那么也许您应该在页面上放置一个文字,然后设置该文字的文本,而不是执行 Response.Write。

        【讨论】:

          【解决方案9】:

          在某些情况下您可能需要 Response.Write。

          假设您将图像存储在数据库中,并希望通过字节数组将它们流式传输到您的页面上。如果没有 Response.Write,我认为你无法做到。

          【讨论】:

            【解决方案10】:

            我们有一些遗留代码,其中所有 HTML 输出都是在 VB DLL 中创建的,因为它在当时是使用分布式事务控制创建 HTML 的最快方式。

            然而 ASP.NET 有点否定了这一点,因为它为您将 aspx 文件和代码编译为 DLL。

            Response.Write 对于特定任务仍然可以,但是绝大多数编码不再需要这样做。

            【讨论】:

              【解决方案11】:

              只是在黑暗中拍摄,但您是否建议使用 Response.write 进行调试?类似的东西:

              Response.Write("Inside first loop.");
              

              如果是这样,考虑到 Visual Studio/.NET 中的新调试工具,我会说它已经过时了。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-04-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多