RegisterStartupScript
和RegisterClientScriptBlock
之间唯一的区别是,RegisterStartupScript将javascript放在页面的结束</form>
标记之前,而RegisterClientScriptBlock将其放在页面的开始<form>
标记之后?
另外,什么时候你会选择一个而不是另一个?我写了一个快速的样例页面,在那里我有一个问题,我不确定它发生的确切原因。
下面是aspx标记:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblDisplayDate" runat="server"
Text="Label" /><br />
<asp:Button ID="btnPostback" runat="server"
Text="Register Startup Script"
onclick="btnPostback_Click" /><br />
<asp:Button ID="btnPostBack2" runat="server"
Text="Register"
onclick="btnPostBack2_Click" />
</div>
</form>
</body>
</html>
下面是后面的代码:
protected void Page_Load(object sender, EventArgs e)
{
lblDisplayDate.Text = DateTime.Now.ToString("T");
}
protected void btnPostback_Click(object sender, EventArgs e)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(@"<script language='javascript'>");
sb.Append(@"var lbl = document.getElementById('lblDisplayDate');");
sb.Append(@"lbl.style.color='red';");
sb.Append(@"</script>");
if(!ClientScript.IsStartupScriptRegistered("JSScript"))
{
ClientScript.RegisterStartupScript(this.GetType(),"JSScript",
sb.ToString());
}
}
protected void btnPostBack2_Click(object sender, EventArgs e)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(@"<script language='javascript'>");
sb.Append(@"var lbl = document.getElementById('lblDisplayDate');");
sb.Append(@"lbl.style.color='red';");
sb.Append(@"</script>");
if (!ClientScript.IsClientScriptBlockRegistered("JSScriptBlock"))
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "JSScriptBlock",
sb.ToString());
}
}
问题是,当我单击btnPostBack
按钮时,它会执行回发并将标签更改为红色,但当我单击btnPostBack2
时,它会执行回发,但标签颜色不会更改为红色。为什么会这样呢?是不是因为标签没有初始化?
我还读到,如果你使用UpdatePanel
,你需要使用ScriptManager.RegisterStartupScript
,但如果我有MasterPage
,我会使用ScriptManagerProxy
吗
发布于 2014-04-24 14:41:59
这里有一个来自ASP.NET社区的simplest示例,这让我对这个概念有了一个清晰的理解……
这有什么不同呢?
例如,下面是一种在页面加载到浏览器中时将焦点放在页面上的文本框上的方法-使用Visual Basic使用RegisterStartupScript
方法:
Page.ClientScript.RegisterStartupScript(Me.GetType(), "Testing", _
"document.forms[0]['TextBox1'].focus();", True)
这很有效,因为当浏览器到达页面底部并到达这一小段JavaScript时,页面上的文本框就会生成并放置在页面上。
但是,如果它是这样编写的(使用RegisterClientScriptBlock
方法):
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Testing", _
"document.forms[0]['TextBox1'].focus();", True)
焦点将不会转到textbox控件,并在页面上生成JavaScript错误
这样做的原因是浏览器将在文本框出现在页面上之前遇到JavaScript。因此,JavaScript将无法找到TextBox1。
https://stackoverflow.com/questions/666519
复制相似问题