关于RegisterClientScriptBlock和RegisterStartupScript的区别,网上很多贴子是这么解释的:
这两个方法唯一的不同之处在于向“何处”注册脚本块。
RegisterClientScriptBlock(key, script) 在 form开始处(紧接 <form runat="server"> 标识之后)发送脚本块
使用场景: 一般不使用DOM元素
RegisterStartupScript(key, script) 在 form结尾处(在 </form> 标识之前)发送脚本块,在document装载完成后会执行,等价于body.onload=f(){}里的内容
使用场景: 一般要使用DOM元素,比如:修改dom元素的值等
实验一下,我们发现:
RegisterClientScriptBlock(key, script) 在 form开始处(紧接 <form runat="server"> 标识之后)发送脚本块
RegisterStartupScript(key, script) 在 form结尾处(在 </form> 标识之前)发送脚本块
这是这两个方法的区别。但问题是:
在 form结尾处(在 </form> 标识之前)发送脚本块,等价于body.onload=f(){}里的内容吗?显然不是啊!
比如,
关于RegisterClientScriptBlock和RegisterStartupScript的区别,只是前者被放在了<form>之后,
放在HTML最后面,只要html文件加载并解析到最后就能执行,这时可以获取到页面上的元素,却不能获取到页面上图片的尺寸。
如果我们的DOM对象放在<form></form>之后,在body.onload中的JS函数,仍然是可以访问的,但放在
RegisterStartupScript(key, script) 仍然无法访问!
比如下面的页面结构:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="1.aspx.cs" Inherits="rent._1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function f() {
alert(document.getElementById("spn1").innerText);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
<spn id="spn1">Span Text</spn>
</body>
</html>
用下面的方法扫行f(),JS是无法取得DOM对象spn1的:
protected void Page_Load(object sender, EventArgs e)
{
RegisterStartupScript("scr_login", "<script type=\"text/javascript\">f();</script>");
}
}
所以,结论是:
RegisterStartupScript(key, script) 并不等价于body.onload=f(){}
而后者放了在了</form>之前(能够访问form之前和form之中,但不能访问form之后的DOM对象),仅此而已!
最后,再讨论一个问题:脚本放在<body onload="f1();">,和放在HTML文档最后面有区别吗?
放在<body onload="f1();">中,要等到整个页面所有元素(包括所有图片)都加载完成之后才能执行,这时可以获取到页面上图片的尺寸。
相关推荐
写在DataGrid的_ItemDataBound里 if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem) { e.Item.Attributes.Add("onmouseover","this.style.backgroundColor=’#99cc00...
很好用的一个功能,可以随意...Page.RegisterStartupScript("myscript", "<script>window.onload=function(){sAlert(' 帐号激活成功,系统奖励您" + MarkFromValue.value_1 + "积分!','Default.aspx');}</script>");
写在DataGrid的_ItemDataBound里 if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem) { e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#99cc00';...
{ if (event.clientY<0 && event.clientX>document.body.clientWidth-20 || event.clientY<0 && event.clientX|| event.altKey || event.clientY>document.body.clientHeight) event.returnValue="If you have ...
AJAX弹出框_利用ScriptManager.RegisterStartupScript
if (this.txtDLM.Text.Trim() == "") { Page.ClientScript.RegisterStartupScript(this.GetType(), "info", "<script>alert('登录名不能为空!');</script>"); return; } if (this.txtMM.Text.Trim() != this....
<script type="text/C#" runat="server"> BinaryReader ms; UploadInfo uploadInfo = null; protected void Page_Load(object sender, EventArgs args) { if (this.IsPostBack) { uploadInfo = this....
public partial class Manages_... this.Page.RegisterStartupScript("ss", "<script>alert('验证码输入错误,请刷新页面!')</script>"); } } protected void Button2_Click(object sender, EventArgs e) { } }
如果不用Ajax,cs中运行某段js代码方式可以是: Page.ClientScript.RegisterStartupScript(Page.GetType(), “”, “[removed]window.open(‘default2.aspx’)[removed]”); 如果页面中使用了Ajax ,则上述代码即使...
任意强制浏览器默认页.e任意强制浏览器默认页.e
最近在用ASP .NET的code behind 调用javascript中发现Response.Write不能拿到form的值,而ClientScript.RegisterStartupScript可以。
介绍 : 超级实用. #region 显示消息提示对话框 ... page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script language='javascript'>" + script + "</script>"); } .........
// 最后,讲一下RegisterStartupScript和RegisterClientScriptBlock的差别: // Page.ClientScript.RegisterStartupScript(Page.GetType(),"alert1", "alert('test')",true); //在生成页面的后半部分!! //...
if (FileUpload1.HasFile == false) { Page.ClientScript.RegisterStartupScript(this.GetType(), “shifou”, “[removed]alert(‘请您选择 Excel文件’)[removed] “); return; }
avascript与c#后台交互 1.在后台c#代码中调用jacascript的方法 javascript代码: <script type="text/javascript" ... ClientScript.RegisterStartupScript(this.GetType(), "clear", "<script>test()</script>"); }
-修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel...
-修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel...
方法:采用 ScriptManager.RegisterStartupScript(Control controlId,Type this.GetType(),String key,String script block)方法。 有人说controlId必须是UpdatePanel里的,其实不然,page控件就可以