¿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
?
fuente
Aquí hay un ejemplo más simple de la comunidad ASP.NET, esto me dio una comprensión clara del concepto ...
¿Qué diferencia hace esto?
Para un ejemplo de esto, aquí hay una manera de enfocar un cuadro de texto en una página cuando la página se carga en el navegador, con Visual Basic utilizando el
RegisterStartupScript
método:Esto funciona bien porque el cuadro de texto en la página se genera y se coloca en la página cuando el navegador llega al final de la página y llega a este pequeño fragmento de JavaScript.
Pero, si en cambio se escribió así (usando el
RegisterClientScriptBlock
método):El foco no llegará al control del cuadro de texto y se generará un error de JavaScript en la página
La razón de esto es que el navegador encontrará el JavaScript antes de que el cuadro de texto esté en la página. Por lo tanto, el JavaScript no podrá encontrar un TextBox1.
fuente