Tips - ASP.NET

【TOP】

サーバサイドコードからJavaScriptを埋め込む
直接aspxファイルに<script>ブロックを書くことも出来ますが、コード(sample.aspx.vbまたはsample.aspx.cs)からスクリプトを埋め込むには以下のようにします。この例は、クライアントサイドで実行するスクリプトを埋め込んでいます。
Page.RegisterClientScriptBlock("client", "<script language=""JavaScript""> & _ window.open('frmScript.aspx','" & Me.ID & _ "','width=200,height=180,toolbar=no,scrollbars=no');</script>")
2006.05.06 追記
v2.0からは上記は旧形式とされ、ClientScriptManagerクラスを使用することが推奨されています。
以下に例を示します。(コードはC#です)
protected void Page_Load(object sender, EventArgs e) { // ClientScriptManagerを取得 ClientScriptManager csMgr = Page.ClientScript; // ClientScriptを記述 StringBuilder sb = new StringBuilder(string.Empty); sb.Append("<script type='text/javascript'>\r\n"); sb.Append("function sayHello(){\r\n"); sb.Append("\talert('Hello!');\r\n"); sb.Append("}\r\n"); sb.Append("</script>"); // JavaScript関数を出力 if(!csMgr.IsClientScriptBlockRegistered("SayHelloFuncScript")) { csMgr.RegisterClientScriptBlock(this.GetType(), "SayHelloScript", sb.ToString(), false); } // 上記で登録した関数を呼び出すスクリプトを出力 if(!csMgr.IsStartupScriptRegistered("DoHelloScript")) { csMgr.RegisterStartupScript(this.GetType(), "DoHelloScript", "sayHello();", true); } }

このページを表示させると、ページロード中にJavaScriptのアラートが表示されます。
ClientScriptManagerはPage.ClientScriptから取得できます。

ClientScriptManagerのIsClientScriptBlockRegisteredメソッドで、指定したキー文字列のスクリプトがクライアントに 登録済みであるかどうか判断し、RegisterClientScriptBlockメソッドでクライアントスクリプトを登録します。
RegisterClientScriptBlockメソッドの4番目の引数(bool addScriptTags)は、スクリプトタグを出力するかどうかの
フラグで、trueであればスクリプトタグを出力し、falseであれば出力しません。

RegisterClientScriptBlockメソッド、RegisterStartupScriptメソッドも機能はほぼ同じですが、クライアントスクリプトが 出力される位置に違いがあります。以下にクライアントに送信されたページのソースの一部を示します。

<body> <form name="form1" method="post" action="ClientScript.aspx" id="form1"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="QQQQQQQQQQQQQ" /> <script type='text/javascript'> ←RegisterClientScriptBlockメソッドで登録したスクリプト function sayHello(){ alert('Hello!'); } </script> <div> <input name="TextBox1" type="text" id="TextBox1" /> </div> <script type="text/javascript"> ←RegisterStartupScriptメソッドで登録したスクリプト <!-- sayHello();// --> </script> </form> </body>
RegisterClientScriptBlockメソッドは関数や定数の定義などに、RegisterStartupScriptはスクリプトを実行させる場合に 使用するとよいかもしれません。
【戻る】