Response.Write已过时?

5

我最近参加了一次技术面试,其中我使用了Response.Write()。面试官告诉我这种方法已经过时了,现在有更好的方法。然而面试官没有进一步解释,所以我很想知道他指的是什么。有人有任何想法吗?


2
你应该知道,所有的asp.net服务器控件在内部使用Response.Write来发出它们的HTML代码...这就是它存在的原因。 - NotMe
11个回答

6

如果页面上所有的内容都是由Response.Write输出的,那么Response.Write非常好用。当我需要使用ASPX动态生成非HTML文件时,我就会使用它。

如果你正在使用非空的ASPX页面,使用Response.Write将毫无意义。


2
我只有在将数据移动到输出流时,才会觉得使用R-dot-W还算可以,即使是这样,也仅限于输入数据来自干净的源,例如XSLT转换或某些序列化,而不是一堆硬编码的HTML字符串。 - annakata
1
在这种情况下,你不应该使用通用处理程序来避免事件链开销吗? - ChaosPandion
@ChaosPandion,如果你指的是IHttpHandler,我同意。 - Jonathan Allen

4
在aspx的内联服务器脚本标记中:
<%= SomeProperty.Name %>

在代码中 - 这取决于情况,但通常有更好的替代方案,如HtmlTextWriter、ScriptManager(用于注册脚本)、literal控件、占位符或其他内容。

2
<%= 其实只是 Response.Write 的简写方式 - annakata
annakata:是的,但在aspx中看起来更美观。而且基于它的本质,你无法在代码中使用它。 - Tamas Czinege
我对此并不热衷。我更喜欢在我选择的时间以及经过适当检查后,通过SomeProperty.Name填充asp:label或asp:literal。如果SomeProperty为空,那么你将会追踪一个令人沮丧的错误。 - n8wrl

3

还有许多其他方法。我避免使用Response.Write,因为它取决于输出的确切顺序。我更喜欢使用Literal控件,并将值分配给其Text属性。

通常,我也会尽量避免使用<%=(在此返回值)%>内联语句,因为我喜欢仅在aspx页面中包含页面结构,并将服务器端代码语句保留在代码后台文件中。


4
需要注意的一点是,随着ASP.NET MVC的出现,再次使用<% %>和<%= %>已成为一种被接受的做法。 - Tamas Czinege
@DrJokepu:说得好,我也注意到了。个人而言,我不确定是否喜欢这个,但是我还没有深入研究过ASP.NET MVC。也许我会给自己一个惊喜 :) - Fredrik Mörk
2
一旦你进入 ASP / MVC,它立即感觉更像一个模板语言(类似于XSLT或JSP),这是一个完全合理的使用 <%= 的地方。你可能感到的恶心是 Webforms 疾病的症状,并且在 MVC 剂量后将完全消失 :P - annakata
@annakata - 我想你应该试一试,也许是时候重建我的网站了... - Fredrik Mörk

2
一个ASP.Net页面是一个高度结构化的软件,由一系列控件组成,这些控件负责提供它们自己的输出。在这种情况下,Response.Write似乎已经过时了,因为它回溯到最初的ASP页面,其中所有内容都是内联呈现的。
现代页面只更新呈现其自己输出的控件的属性。 Response.Write通过中断控件输出的流程来破坏层次结构。

+1 - 在这种情况下,他们真的应该使用通用处理程序。 - ChaosPandion

2

取决于你的应用程序。记住,在你的 .aspx 文件中,<%= "some string" %> 仍然是 Response.Write() 的快捷方式。

如果你正在使用 Response.Write() 函数来渲染所有的 HTML,则他可能是正确的。但如果你正在使用它来进行内联代码,那么它其实还是可以的。


2
除非该方法被标记为过时,否则我不会将其视为“老式方法”。但是,在某些情况下,可能存在更好的替代方案,因为它们更易于维护。例如,您可以考虑在HTML中编写一堆<%= %>语句,但是这与HttpResponse.Write同时引入,因此如果其中一个是“老式方法”,则两者都是。在其他情况下,您可能还想考虑使用模板引擎。这完全取决于具体情况。如果您的面试官不想详细解释,那也说明了面试官的问题。

0

只是尝试一下,但你有考虑使用 Response.write 进行调试吗?就像这样:

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

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

0
我认为面试官想要表达的不是“老式”的意思。根据上下文,可能有更好的方法可用。如果您正在使用内联脚本标签,例如Jason的示例,则<%=约定可能更适合该任务。但是,如果您正在执行任何类型的视图逻辑,<% if (*conditional*) { ... } %>那么您的选择可能会受到限制。

0

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

如果它是为了将字符串输出到页面上进行显示,那么也许您应该在页面上放置一个 Literal,然后设置该字面量的文本,而不是使用 Response.Write。


0

在编程中,可能存在某些情况下你需要使用 Response.Write。

比如说,如果你想通过字节数组将数据库中存储的图像流式传输到页面上,我认为你只能使用 Response.Write 来实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接