Response下的3个输出 :Write/RegisterStartupScript/RegisterClientScriptBlock
2008-10-29 13:23
417 查看
有个项目 需要弹出一个新页面,我用的response.write("<script>window.open("***")</script>");功能实现没有问题。可是 每当新页面弹出父页面会刷新,父页面格式就会初始化(我使用后台赋的格式),考虑到应该是控件没有加载到设置,通过firebug看却不是这样,控件的属性是已经改变就是显示的不对,然后通过排除法确定了是response.write()的问题。google了一下,发现问题的原因是这样的:
response下有三个输出方式:Write/RegisterStartupScript/RegisterClientScriptBlock 摘录一下啊
Page.Response.Write("<script>var response;</script>");
this.ClientScript.RegisterStartupScript(this.GetType(), "gg", "var RegisterStartupScript;", true);
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "gg", "var RegisterStartupScript;", true);
旧
{
Page.RegisterStartupScript("RegisterStartupScript","<script>var RegisterStartupScript;</script>");
Page.RegisterClientScriptBlock("RegisterClientScriptBlock","<script>var RegisterClientScriptBlock;</script>");
}
Response.Write输出后的位置在源文件的第一行.
RegisterClientScriptBlock输出后的位置会在<form>的下一行.(在asp.net自带的脚本和一些隐藏域之下).
RegisterStartupScript输出后的位置会在</form>的上一行.
RegisterClientScriptBlock
的原型与RegisterStartupScript相同,两个函数不同在于将其包含的脚本代码写入到HTML文件的不同位
置.RegisterClientScriptBlock在 Page 对象的
元素的开始标记后立即发出客户端脚本,RegisterStartupScript则是在Page 对象的
元素的结束标记之前发出该脚本。如果你的脚本有与页面对象(doucument对象)进行交互的语句,则推荐使用
RegisterStartupScript,反之如果要想客户端脚本尽可能早的执行,则可以使用RegisterClientScriptBlock或
Response.Write。
RegisterClientScriptBlock一般返回的是客户端函数的
包装,而RegisterStartupScript返回得函数在document装载完成后会执行,类似于我们平时所说的body
onload="f()"里面的函数;这两个方法在客户端呈现的代码位置不同,RegisterClientScriptBlock在<form
runat=server>之后,而RegisterStartupScript在</form>之前。
补充例子:
....
</HEAD>
<body MS_POSITIONING="GridLayout">
<form name="Form1" method="post" action="WebForm6.aspx" id="Form1">
<input type="hidden" name="__VIEWSTATE" value="dDw3MzU1MTQ5MzY7Oz6nugrEg+5T6RC7MTIuLoIrMLQLPw==" />
<script>function block(){}</script> ------------>RegisterClientScriptBlock()方法输出的在这里
<input name="TextBox1" type="text" id="TextBox1" style="Z-INDEX: 101; LEFT: 296px; POSITION: absolute; TOP: 120px" />
<script>function startup(){}</script> ------------>RegisterStartupScript()方法输出的在这里
</form>
</body>
</HTML>
response下有三个输出方式:Write/RegisterStartupScript/RegisterClientScriptBlock 摘录一下啊
Page.Response.Write("<script>var response;</script>");
this.ClientScript.RegisterStartupScript(this.GetType(), "gg", "var RegisterStartupScript;", true);
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "gg", "var RegisterStartupScript;", true);
旧
{
Page.RegisterStartupScript("RegisterStartupScript","<script>var RegisterStartupScript;</script>");
Page.RegisterClientScriptBlock("RegisterClientScriptBlock","<script>var RegisterClientScriptBlock;</script>");
}
Response.Write输出后的位置在源文件的第一行.
RegisterClientScriptBlock输出后的位置会在<form>的下一行.(在asp.net自带的脚本和一些隐藏域之下).
RegisterStartupScript输出后的位置会在</form>的上一行.
RegisterClientScriptBlock
的原型与RegisterStartupScript相同,两个函数不同在于将其包含的脚本代码写入到HTML文件的不同位
置.RegisterClientScriptBlock在 Page 对象的
元素的开始标记后立即发出客户端脚本,RegisterStartupScript则是在Page 对象的
元素的结束标记之前发出该脚本。如果你的脚本有与页面对象(doucument对象)进行交互的语句,则推荐使用
RegisterStartupScript,反之如果要想客户端脚本尽可能早的执行,则可以使用RegisterClientScriptBlock或
Response.Write。
RegisterClientScriptBlock一般返回的是客户端函数的
包装,而RegisterStartupScript返回得函数在document装载完成后会执行,类似于我们平时所说的body
onload="f()"里面的函数;这两个方法在客户端呈现的代码位置不同,RegisterClientScriptBlock在<form
runat=server>之后,而RegisterStartupScript在</form>之前。
补充例子:
....
</HEAD>
<body MS_POSITIONING="GridLayout">
<form name="Form1" method="post" action="WebForm6.aspx" id="Form1">
<input type="hidden" name="__VIEWSTATE" value="dDw3MzU1MTQ5MzY7Oz6nugrEg+5T6RC7MTIuLoIrMLQLPw==" />
<script>function block(){}</script> ------------>RegisterClientScriptBlock()方法输出的在这里
<input name="TextBox1" type="text" id="TextBox1" style="Z-INDEX: 101; LEFT: 296px; POSITION: absolute; TOP: 120px" />
<script>function startup(){}</script> ------------>RegisterStartupScript()方法输出的在这里
</form>
</body>
</HTML>
相关文章推荐
- RegisterClientScriptBlock、RegisterStartupScript、Response.Write、Response.End 疑惑?
- Response.Write,Page.RegisterClientScriptBlock和Page.RegisterStartupScript的区别
- asp.net 需知:RegisterStartupScript、RegisterClientScriptBlock、Response.Write 使用区别
- Response.Write()、Page.RegisterClientScriptBlock()、Page.RegisterStartupScript 的区别
- Response.Write,Page.RegisterClientScriptBlock和Page.RegisterStartupScript的区别
- Response.Write/Page.ClientScript.RegisterStartupScript/Page.ClientScript.RegisterClientScriptBlock区别
- Response.Write 与 Page.ClientScript.RegisterStartupScript 与 Page.ClientScript.RegisterClientScriptBlock 之间的区别
- response.write()、Page.ClientScript.RegisterStartupScript()、Page.ClientScript.RegisterClientScriptBlock() 方法的区别
- Response.Write,Page.RegisterClientScriptBlock和Page.RegisterStartupScript的区别
- Response.write,Page.RegisterStartupScript与Page.RegisterClientScriptBlock三者的区别
- Response.Write,Page.RegisterClientScriptBlock和Page.RegisterStartupScript的区别
- Response.Write 与 Page.ClientScript.RegisterStartupScript 与 Page.ClientScript.RegisterClientScriptBlock 之间的区别
- Response.Write 与 Page.ClientScript.RegisterStartupScript 与 Page.ClientScript.RegisterClientScriptBlock 之间的区别
- RegisterStartupScript,RegisterClientScriptBlock,Response.Write 简单说明区别
- Response.Write 输出js和Page.ClientScript.RegisterStartupScript的区别
- Response.Write和ClientScript.RegisterStartupScript区别 .
- 在atlas(ajax)中请不要使用Response.Write,请使用ClientScript.RegisterClientScriptBlock替换
- RegisterStartupScript和RegisterClientScriptBlock输出位置的区别
- ASP .NET调用javascript中Response.Write和ClientScript.RegisterStartupScript的区别
- Response.Write和ClientScript.RegisterStartupScript区别