La seule différence entre le RegisterStartupScriptet le RegisterClientScriptBlockest que RegisterStartupScript place le javascript avant la </form>balise de fermeture de la page et RegisterClientScriptBlock le place juste après la <form>balise de début de la page?
De plus, quand choisiriez-vous l'un plutôt que l'autre? J'ai écrit une page d'exemple rapide où j'ai eu un problème et je ne suis pas sûr de la raison exacte pour laquelle cela se produit.
Voici le balisage 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>
Voici le code derrière:
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());
}
}
Le problème est que lorsque je clique sur le btnPostBackbouton, il effectue une publication et change l'étiquette en rouge, mais lorsque je clique sur btnPostBack2, il effectue une publication, mais la couleur de l'étiquette ne devient pas rouge. Pourquoi est-ce? Est-ce parce que l'étiquette n'est pas initialisée?
J'ai aussi lu que si vous utilisez un UpdatePanel, vous devez l'utiliser ScriptManager.RegisterStartupScript, mais si j'en ai un MasterPage, est-ce que j'utiliserais ScriptManagerProxy?