直接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 csMgr = Page.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>");
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はスクリプトを実行させる場合に
使用するとよいかもしれません。