最佳答案
RegisterStartupScript
和 RegisterClientScriptBlock
之间的唯一区别是 RegisterStartupScript 将 javascript 放在页面的 </form>
关闭标记之前,而 RegisterClientScriptBlock 将其放在页面的 <form>
开始标记之后吗?
还有,你什么时候会选择其中一个?我写了一个快速的示例页面,在那里我有一个问题,我不知道确切的原因,为什么会发生这种情况。
<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
吗?