轉自:http://cgxcn.blog.163.com/blog/static/132312422009426112839757/
Response.Write 與 Page.ClientScript.RegisterStartupScript 與 Page.ClientScript.RegisterClientScriptBlock 之間的區別
方法1,使用Response.Write,這種方法會把JS代碼寫在頁面的最頂部(<html>的前面):
System.Web.HttpContext.Current.Response.Write("<script language=javascript>alert('JS代碼');</script>");
方法2,使用RegisterStartupScript,這種方法會把JS代碼嵌入在頁面的底部、表單的最後 (</form>前面),適用於要在頁面控制項載入完成後啟動並執行JS代碼 :
System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(),"clientScript"))
page.ClientScript.RegisterStartupScript(page.GetType(), "clientScript", "<script language=javascript>alert('JS代碼');</script>");
方法3,使用RegisterClientScriptBlock,這種方法會把JS代碼嵌入在頁面的頂部、表單的最前 (<form>後面),適用於要在控制項載入前執行的JS代碼,類似於上面的Response.Write方式 :
System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
if (!page.ClientScript.IsClientScriptBlockRegistered(page.GetType(),"clientScript"))
page.ClientScript.RegisterClientScriptBlock(page.GetType(), "clientScript", "<script language=javascript>alert('JS代碼');</script>");
那麼,方法2和方法3之間有何不同呢?主要區別在於,RegisterStartupScript 方法是將 JavaScript 嵌入到 ASP.NET 頁面的底部,恰好位於關閉元素 </form> 的前面。RegisterClientScriptBlock 方法是將 JavaScript 嵌入到頁面中開啟元素 <form> 的緊後面。那麼,這有何不同呢?正如我們將要看到的,這有很大的不同。
就此列舉一例,以下是在頁面載入到瀏覽器時,將焦點置於該頁面上的一個文字框中的方法 - 使用利用了 RegisterStartupScript 方法的 Visual Basic:
Page.ClientScript.RegisterStartupScript(Me.GetType(), "Testing", _ "document.forms[0]['TextBox1'].focus();", True)
由於在瀏覽器運行到頁面底部並執行此小段 JavaScript 時,就已產生了頁面上的文字框,並已將其放到了頁面中,因此,此方法運行正常。但是,如果不按照上述方法,而編寫如下代碼(使用 RegisterClientScriptBlock 方法):
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Testing", _ "document.forms[0]['TextBox1'].focus();", True)
文字框控制項將不會獲得焦點,且會在頁面上產生一個 JavaScript 錯誤。
應用範例:
//在頁面頂部添加指令碼
if (!Page.ClientScript.IsClientScriptBlockRegistered("myscriptKey"))//判斷是否已經存在相同//索引值的ScriptBlock
{
string myScript = @"function AlertHello(){alert('hello xuanhun!!');}";//指令碼內容
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myscriptKey", myScript,true);
}
//在頁面底部添加指令碼
if(!Page.ClientScript.IsStartupScriptRegistered("footscriptkey"))
{
string CallScript = @"AlertHello();";
Page.ClientScript.RegisterStartupScript(this.GetType(), "footscriptKey", CallScript, true);
}
// 添加對js檔案的引用
if(!Page.ClientScript.IsClientScriptIncludeRegistered("incluedeKey"))
{
string IncludeScript = @"/js/ShowHello.js";
Page.ClientScript.RegisterClientScriptInclude("includeKey", IncludeScript);
}