Apakah satu-satunya perbedaan antara RegisterStartupScript
dan RegisterClientScriptBlock
adalah 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 btnPostBack
tombol, 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
?
sumber
Berikut adalah contoh paling sederhana dari Komunitas ASP.NET, ini memberi saya pemahaman yang jelas tentang konsep ....
apa bedanya ini?
Untuk contohnya, berikut adalah cara untuk memfokuskan pada kotak teks pada halaman ketika halaman dimuat ke dalam browser — dengan Visual Basic menggunakan
RegisterStartupScript
metode:Ini berfungsi dengan baik karena kotak teks pada halaman dihasilkan dan ditempatkan pada halaman pada saat browser turun ke bagian bawah halaman dan sampai ke sedikit JavaScript ini.
Tetapi, jika sebaliknya ditulis seperti ini (menggunakan
RegisterClientScriptBlock
metode):Fokus tidak akan sampai ke kontrol kotak teks dan kesalahan JavaScript akan dihasilkan pada halaman
Alasan untuk ini adalah bahwa browser akan menemukan JavaScript sebelum kotak teks ada di halaman. Oleh karena itu, JavaScript tidak akan dapat menemukan TextBox1.
sumber