Apakah satu-satunya perbedaan antara RegisterStartupScriptdan RegisterClientScriptBlockadalah bahwa RegisterStartupScript menempatkan javascript sebelum </form>tag penutup halaman dan RegisterClientScriptBlock menempatkannya tepat setelah <form>tag awal halaman?
Juga, kapan Anda akan memilih satu dari yang lain? Saya menulis halaman contoh cepat di mana saya memiliki masalah dan saya tidak yakin alasan pasti mengapa itu terjadi.
Inilah markup 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>
Inilah Kode Di Baliknya:
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());
}
}
Masalahnya adalah ketika saya mengklik btnPostBacktombol, itu melakukan postback dan mengubah label menjadi merah, tetapi ketika saya mengklik btnPostBack2, itu postback, tetapi warna label tidak berubah menjadi merah. Kenapa ini? Apakah karena labelnya tidak diinisialisasi?
Saya juga membaca bahwa jika Anda menggunakan UpdatePanel, Anda harus menggunakan ScriptManager.RegisterStartupScript, tetapi jika saya punya MasterPage, apakah saya akan menggunakan ScriptManagerProxy?