¿Es la única diferencia entre el RegisterStartupScript
y el RegisterClientScriptBlock
es que RegisterStartupScript coloca el javascript antes de la </form>
etiqueta de cierre de la página y RegisterClientScriptBlock lo coloca justo después de la <form>
etiqueta de inicio de la página?
Además, ¿cuándo elegirías uno sobre el otro? Escribí una página de muestra rápida donde tuve un problema y no estoy seguro de la razón exacta de por qué está sucediendo.
Aquí está el marcado 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>
Aquí está el código detrás:
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());
}
}
El problema es cuando hago clic en el btnPostBack
botón, hace una devolución de datos y cambia la etiqueta a rojo, pero cuando hago clic en el btnPostBack2
, hace una devolución de datos, pero el color de la etiqueta no cambia a rojo. ¿Por qué es esto? ¿Es porque la etiqueta no está inicializada?
También leí que si está usando un UpdatePanel
, debe usarlo ScriptManager.RegisterStartupScript
, pero si tengo un MasterPage
, ¿lo usaría ScriptManagerProxy
?