사이의 유일한 차이 RegisterStartupScript와는 RegisterClientScriptBlockRegisterStartupScript 닫는 전에 자바 스크립트를두고 있다는 것입니다 </form>그것은 바로 시작 후 페이지와 RegisterClientScriptBlock 둔다의 태그 <form>페이지 태그?
또한 언제 다른 것을 선택할 것입니까? 문제가 발생한 빠른 샘플 페이지를 작성했는데 왜 정확한지 잘 모르겠습니다.
다음은 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>
코드는 다음과 같습니다.
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());
}
}
문제는 btnPostBack버튼을 클릭하면 포스트 백을 수행하고 레이블을 빨간색으로 변경하지만을 클릭하면 btnPostBack2포스트 백을 수행하지만 레이블 색상은 빨간색으로 변경되지 않습니다. 왜 이런거야? 라벨이 초기화되지 않았기 때문입니까?
또한을 사용하는 UpdatePanel경우을 사용해야 ScriptManager.RegisterStartupScript하지만 을 (를) 사용하는 경우 MasterPage사용할 것 ScriptManagerProxy입니까?