Contents

最近在用ASP .NET的code behind 调用javascript中发现Response.Write不能拿到form的值,而ClientScript.RegisterStartupScript可以。例如下面的代码

1
2
3
4
5
6
StringBuilder sb = new StringBuilder();
sb.Append("<script language=javascript>");
sb.Append("alert(document.forms.length);");
sb.Append("</script>");
Response.Write(sb.ToString());
ClientScript.RegisterStartupScript(this.GetType(), "test", sb.ToString());

可以明显的看到,Response.Write得到的是0,ClientScript.RegisterStartupScript得到的是1。

另外,Response.Write不能调用aspx里面定义的javascript函数,ClientScript.RegisterStartupScrip可以,示例如下。
.cs代码

1
2
3
4
5
6
StringBuilder sb = new StringBuilder();
sb.Append("<script language=javascript>");
sb.Append("TestAlert();");
sb.Append("</script>");
//Response.Write(sb.ToString());
ClientScript.RegisterStartupScript(this.GetType(), "test", sb.ToString());

.aspx代码

1
2
3
4
5
<script type="text/javascript">
function TestAlert() {
alert('just a test');
}
</script>

可以看到Response.Write会出错,firebug里面提示TestAlert没有定义,而ClientScript.RegisterStartupScript可以正确执行。

Contents