The main difference is that the RegisterStartupScript method places the JavaScript at the bottom of the ASP.NET page right before the closing </form> element. The RegisterClientScriptBlock method places the JavaScript directly after the opening <form> element in the page. So what difference does this make? It can make quite a bit of difference, as we will see.
For an example of this, here is a way to put focus on a text box on
a page when the page is loaded into the browser—with Visual Basic using
the RegisterStartupScript method:
Page.ClientScript.RegisterStartupScript(Me.GetType(), "Testing", _
"document.forms[0]['TextBox1'].focus();", True)
This works well because the textbox on the page is generated
and placed on the page by the time the browser gets down to the bottom
of the page and gets to this little bit of JavaScript. But, if instead
it was written like this (using the RegisterClientScriptBlock method):
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Testing", _
"document.forms[0]['TextBox1'].focus();", True)
Focus will not get to the textbox control and a JavaScript error will be generated on the page
The reason for this is that the browser will encounter the
JavaScript before the text box is on the page. Therefore, the
JavaScript will not be able to find a TextBox1.
Keeping JavaScript in a Separate File (.js)
Keeping
JavaScript functions in a separate file (a .js file) is highly
recommended. Once they are in a separate file and part of a project,
the file can be imported into a page using some of the methods already
described.
For instance, a .js file can be included in an ASP.NET page using the following code:
Visual Basic
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "MyScript", _
"MyJavaScriptFile.js")
C#
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript",
"MyJavaScriptFile.js");
Once the .js file is imported into the ASP.NET page, any of
the JavaScript functions can be called as before. This is a great way
to manage JavaScript functions and keep them separate from the other
logic of ASP.NET pages. It is also an easy way to use the same
JavaScript functions on multiple ASP.NET pages.