【发布时间】:2010-10-29 20:02:15
【问题描述】:
我最近进行了一次求职面试的技术测试,我在其中进行了 Response.Write()。有人告诉我这是“过时的”,现在有更好的方法可以做到这一点。面试官不会详细说明,所以我很想知道他指的是什么。有人有什么想法吗?
【问题讨论】:
-
你应该知道所有的 asp.net 服务器控件都使用 Response.Write 在幕后发出它们的 HTML 代码......这就是它的用途。
我最近进行了一次求职面试的技术测试,我在其中进行了 Response.Write()。有人告诉我这是“过时的”,现在有更好的方法可以做到这一点。面试官不会详细说明,所以我很想知道他指的是什么。有人有什么想法吗?
【问题讨论】:
Response.Write 很棒,如果页面上的所有内容都是由它发送的。当我必须使用 ASPX 提供即时生成的非 HTML 文件时,我会使用它。
如果您使用的是非空的 ASPX 页面,Response.Write 根本没有任何意义。
【讨论】:
在 aspx - 内联服务器脚本标签中:
<%= SomeProperty.Name %>
在代码中 - 这取决于具体情况,但通常有更好的选择,例如 HtmlTextWriter、ScriptManager(用于注册脚本)、文字控件、占位符或其他东西。
【讨论】:
还有很多其他方法。我避免使用 Response.Write,因为它取决于将内容写入输出的确切顺序。例如,我宁愿使用 Literal 控件并为其 Text 属性分配一个值。
我通常也尽量避免 内联语句,因为我喜欢让 aspx 页面只包含页面结构,并在代码隐藏中保留服务器端代码语句文件。
【讨论】:
取决于您的应用程序。请记住,您的 .aspx 文件中的 仍然是 Response.Write() 的快捷方式
如果您使用 Response.Write() 函数渲染所有 HTML,那么是的,也许他是对的。但是如果你用它来做内联代码,那其实还可以。
【讨论】:
除非该方法被标记为过时,否则我不会关闭它。它当然不是“老式的”。但在某些情况下,可能会有更好的替代方案,因为它们更易于维护。
例如,您可以考虑在 HTML 中编写一堆 <%= %> 语句,但这是与 HttpResponse.Write 同时引入的,因此如果其中一个是“老式”的,那么它们都是。
您可能还想考虑在其他情况下使用模板引擎。这一切都取决于。
如果你的面试官不想详细说明,那也说明了面试官的一些情况。
【讨论】:
ASP.Net 页面是一个高度结构化的软件,由负责提供自己的输出的控制层次结构组成。在这种制度下,Response.Write 似乎已经过时了,因为它让人回想起原始的 ASP 页面,所有内容都是内联呈现的。
现代页面只是更新呈现自己的输出的控件的属性。 Response.Write 通过中断控制输出流来打破层次结构。
【讨论】:
我不认为“老式”是面试官真正想说的正确术语。根据上下文,可能有更好的方法可以使用。如果您使用内联脚本标签,例如 Jason 的示例,那么 <%= 约定可能更适合该任务。但是,如果您执行任何类型的视图逻辑,<% if (*conditional*) { ... } %>,那么您的替代方案可能会受到限制。
【讨论】:
这完全取决于您使用 Response.Write 的目的。
如果要输出一个字符串以显示到页面上,那么也许您应该在页面上放置一个文字,然后设置该文字的文本,而不是执行 Response.Write。
【讨论】:
在某些情况下您可能需要 Response.Write。
假设您将图像存储在数据库中,并希望通过字节数组将它们流式传输到您的页面上。如果没有 Response.Write,我认为你无法做到。
【讨论】:
我们有一些遗留代码,其中所有 HTML 输出都是在 VB DLL 中创建的,因为它在当时是使用分布式事务控制创建 HTML 的最快方式。
然而 ASP.NET 有点否定了这一点,因为它为您将 aspx 文件和代码编译为 DLL。
Response.Write 对于特定任务仍然可以,但是绝大多数编码不再需要这样做。
【讨论】:
只是在黑暗中拍摄,但您是否建议使用 Response.write 进行调试?类似的东西:
Response.Write("Inside first loop.");
如果是这样,考虑到 Visual Studio/.NET 中的新调试工具,我会说它已经过时了。
【讨论】: