La seule différence entre les RegisterStartupScript
et le RegisterClientScriptBlock
est que RegisterStartupScript place le javascript avant la fermeture de l'écran. </form>
de la page et RegisterClientScriptBlock le place juste après la balise de démarrage <form>
de la page ?
Par ailleurs, quand choisiriez-vous l'un plutôt que l'autre ? J'ai rédigé une page d'exemple rapide où j'ai rencontré un problème et je ne suis pas sûr de la raison exacte pour laquelle cela se produit.
Voici la balise 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 Behind :
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 bouton btnPostBack
il effectue un postback et change l'étiquette en rouge, mais lorsque je clique sur le bouton btnPostBack2
Il effectue un postback, mais la couleur de l'étiquette ne passe pas au rouge. Comment cela se fait-il ? Est-ce parce que l'étiquette n'est pas initialisée ?
J'ai également lu que si vous utilisez un UpdatePanel
vous devez utiliser ScriptManager.RegisterStartupScript
mais si j'ai un MasterPage
J'utiliserais donc ScriptManagerProxy
?