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

Response.Write()和ClientScript.RegisterStartupScript()有什么区别谢谢。

Response.Write方法可用于在页面的呈现阶段输出代码。 <%= %>服务器标记是<%Response.Write( )%>的快捷方式。

如果您使用后面的代码中的Response.Write ,您将在开始渲染之前写入页面,因此代码将最终在html文档之外。 尽管浏览器将执行代码,但它无法正常工作。 在doctype标记之前有一些东西会使浏览器忽略doctype并以怪癖模式呈现页面,这通常会破坏布局。 此外,由于脚本在页面的任何内容存在之前运行,因此代码无法访问页面中的任何元素。

ClientScript.RegisterStartupScript方法是向页面动态添加脚本的首选方法。 它将脚本呈现在表单的末尾,这样它就不会破坏html documnet,并且它可以访问表单中的元素。

此外,您为每个脚本提供一个标识,这意味着删除了重复项。 如果用户控件注册了一个脚本,并且您使用了多个用户控件实例,则该脚本将仅在页面中呈现一次。

这是个很大的差异。

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

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

希望这是有道理的,然后有更多的细节,但我试图保持简单。

的Response.Write

Write方法将指定的字符串写入当前HTTP输出。

ClientScriptManager.RegisterStartupScript

使用Page对象注册启动脚本。

我认为,这两种方法都是无关的。 Response.Write()可用于在呈现的页面上写入内容。 虽然ClientScript.RegisterStartupScript()可用于在页面启动时注册javascript。