Có phải sự khác biệt duy nhất giữa RegisterStartupScriptvà RegisterClientScriptBlockđó là RegisterStartupScript đặt javascript trước </form>thẻ đóng của trang và RegisterClientScriptBlock đặt nó ngay sau <form>thẻ bắt đầu của trang?
Ngoài ra, khi nào bạn sẽ chọn cái này hơn cái kia? Tôi đã viết lên một trang mẫu nhanh nơi tôi gặp vấn đề và tôi không chắc lý do chính xác tại sao nó lại xảy ra.
Đây là đánh dấu 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>
Đây là mã đằng sau:
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());
}
}
Vấn đề là khi tôi nhấp vào btnPostBacknút, nó sẽ quay lại và thay đổi nhãn thành màu đỏ, nhưng khi tôi nhấp vào btnPostBack2, nó sẽ quay lại, nhưng màu nhãn không chuyển sang màu đỏ. Tại sao lại thế này? Có phải vì nhãn không được khởi tạo?
Tôi cũng đọc rằng nếu bạn đang sử dụng UpdatePanel, bạn cần sử dụng ScriptManager.RegisterStartupScript, nhưng nếu tôi có MasterPage, tôi có sử dụng ScriptManagerProxykhông?