Response.Write过时?

我最近进行了面试的技术测试,我做了一个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的示例,那么<%=约定可能更适合该任务。 但是,如果您执行任何类型的View逻辑, <% if (*conditional*) { ... } %>那么您的替代方案可能会受到限制。

它完全取决于你使用Response.Write的内容。

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

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

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

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

然而,ASP.NET有点否定了它的需要,因为它为你编译了asp的文件和代码。

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

只是在黑暗中拍摄,但你建议使用Response.write进行调试吗? 就像是 :

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

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