Response.Write()和ClientScript.RegisterStartupScript()之间的区别是什么?

5
Response.Write() 和 ClientScript.RegisterStartupScript() 有什么区别?
Response.Write() 方法将文本直接写入 HTTP 响应输出流中,而 ClientScript.RegisterStartupScript() 方法则将脚本块注册到客户端以在页面加载后执行。因此,前者主要用于向客户端发送文本响应,而后者则用于向客户端注册脚本以在页面加载后执行。
4个回答

7
Response.Write方法可用于在页面的呈现阶段输出代码。<%= %>服务器标记是<%Response.Write( )%>的快捷方式。
如果您从代码后台使用Response.Write,则会在页面开始呈现之前写入页面,因此代码最终将位于HTML文档之外。即使浏览器执行该代码,它也无法正常工作。在doctype标记之前有任何内容都将使浏览器忽略doctype并以怪异模式呈现页面,这通常会破坏布局。此外,由于脚本在页面的任何元素存在之前运行,因此代码无法访问页面中的任何元素。 ClientScript.RegisterStartupScript方法是动态添加脚本到页面的首选方法。它将在表单末尾呈现脚本,以便不会破坏HTML文档,并且可以访问表单中的元素。
此外,您可以为每个脚本分配一个标识,这意味着重复项将被删除。如果用户控件注册了脚本,并且您使用多个用户控件实例,则该脚本仅在页面中呈现一次。

你的意思是在ClientScript.RegisterStartupScript方法中使用response.write()会在页面渲染之前执行,而在postback之后执行,我说得对吗?Guffa先生。 - Surya sasidhar
1
@Surya:两者都会将代码添加到发送到浏览器的页面中,因此当页面在浏览器中加载时,代码将运行。区别在于代码放置在响应中的位置。如果在文档之前放置代码,则浏览器先运行代码,然后加载响应的其余部分,即实际页面。如果您使用 Response.Write("<script>alert(1);</script>");,则当警报显示时窗口将为空,并且在关闭警报后加载页面(由于忽略的文档类型可能会变形)。 - Guffa
Guffa先生,您的意思是当我们编写Response.Write("<script>alert(1);</script>")时,在弹出警告后窗口会变成空白,关闭警告后页面才会加载。但是当我使用ClientScript.RegisterStartupScript(gettype(),"sa","<script>alert(1);</script>",false)时,在弹出警告后窗口也会变成空白,关闭警告后页面才会加载。有时候即使我们关闭了警告,窗口仍然是空白的,页面也无法加载,仍然停留在空白页。 - Surya sasidhar
但它将在空白页中。 - Surya sasidhar
那么,空白页面的页面源代码是什么样子的?如果脚本运行,你必须将大部分页面放在表单的末尾。 - Guffa
显示剩余4条评论

3

两者有很大的区别。

基本上,Response.Write会立即写入响应流,通常这会将您编写的任何内容放在页面输出的顶部,甚至在 标记之前(除非您在页面呈现事件之后调用它)。

当您使用RegisterStartupScript时,它将等待并在页面控件呈现后将您的JavaScript写入响应流(即,控件将其HTML写入响应流)。这意味着您注册的JavaScript将在加载到DOM之前由浏览器执行其他HTML。这与事件非常相似。另一件事是,如果“注册”脚本,则如果页面上有多个控件都需要该JavaScript,则可以检查它是否已经被注册,因此只呈现一次,并且两个控件都在客户端使用它。

希望这有意义,还有更多细节,但我尝试保持简单。


你是说在ClientScript.RegisterStartupScript方法中,使用response.write()会在页面渲染之前获取到,而在postback之后获取的是吗?Dukk先生。 - Surya sasidhar
不,回发是指页面刷新但仍停留在同一页上。这将在第一次请求页面时发生。 - Justin Long

0

注册启动脚本与页面对象。阿当谢谢您的回复。 - Surya sasidhar
如果您想在回发后执行脚本块,可以使用此方法。 - rahul

0

我认为这两种方法是不相关的。Response.Write() 可以用于在页面上写入一些渲染的内容。而 ClientScript.RegisterStartupScript() 可以用于在页面启动时注册 JavaScript。


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