2554-07-11

ความแตกต่างของ register javascript

Page.ClientScript.RegisterClientScriptBlock
Page.RegisterStartupScript
ScriptManager.RegisterStartupScript
ScriptManager.RegisterClientScriptBlock
มันต่างกันไง


ต่างกันดังนี้ครับ
1) ถ้าใช้ AJAX UploadPanel ให้ใช้ ScriptManager ครับ Page.ClientScript. มันจะใช้ไม่ได้
2) Page.RegisterStartupScript  มันเป็นของ version เก่าๆ ซึ่งยกเลิกไม่ใช้แล้ว
  แต่ที่ยังมีอยู่ เพราะ Support Version เก่าๆๆ ดังนั้นถ้าจะใช้ให้ใช้  Page.ClientScript.RegisterStartupScript 
3) ความแตกต่าง ระหว่าง RegisterClientScriptBlock กับ RegisterStartupScript อยู่ตรงตำแหน่งที่มัน
เอา Script ไปแปะ ที่ Page ครับ ดังนี้
<body>
<form method="post" action="Default2.aspx" id="form1">
<script type="text/javascript">
//
window.alert('RegisterClientScriptBlock อยู่บน');//]]>
script>
<div id="content">
  ...Create Html Control ต่างๆ ตรงนี้ ซึ่งเป็น Control ที่เราวางไป
  div>
<script type="text/javascript">
//
window.alert('RegisterStartupScript อยู่ด้านล่าง');//]]>
script>
form>
body>
แล้วยังไง ???
 กรณีที่ เราสั่งด้วยแบบนี้
protected void Page_Load(object sender, EventArgs e){
if (!Page.IsPostBack){
Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgAlert1""function MsgAlert1(){window.alert('RegisterStartupScript'); }"true);
Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "MsgAlert2""function MsgAlert2(){window.alert('RegisterClientScriptBlock');}"true);
}
}

ทั้งคู่จะให้ผลเหมือนกัน แต่ถ้าเราเรียกตรงๆๆ ไม่ได้ใส่ function อันนี้จะต่างครับ
นั่นคือ RegisterClientScriptBlock มัน อยู่บ้างบน เวลา Page มัน Gen มันจะทำจากบนลงมาล่าง
ทำให้ มัน Alert ขึ้นมา ก่อนที่ Control จะ Gen ครับ จะกลายเป็นหน้าขาวๆ ไปรอจนกว่าเราจะกดปิด
แต่ถ้าใช้ RegisterStartupScript Control มันถูก Gen ไปแล้ว แล้วค่อย Alert จึงไม่ค่อยเกิดปัญหานี้ครับ
นี่เป็นแค่ตัวอย่างนึง ที่ชี้ให้เห็นถึงความแตกต่างครับ อีกตัวอย่างที่เห็นได้ชัดๆ คือ
หากเราใช้ พวก javascript เช่น document.getElementById("TextBox1").value
ถ้าเราไม่ได้ใส่ function ครอบตามที่บอกไป มันจะเป็นการเรียกใช้ คำสั่งนั้นๆๆเลย
ซึ่ง RegisterClientScriptBlock จะมีปัญหา Error เนื่องจากมันหา Control TextBox1 ไม่เจอ
เพราะมันยังไม่ได้ gen ออกมา แต่กลับไป .value เรียกใช้มันซะงั้น ก็เลย Error ไปตามระเบียบ






ปล. ไม่รู้อ่านเข้าใจไหมครับ ปกติผมก็มักจะใช้ RegisterStartupScript ซะมากกว่าครับ

http://greatfriends.biz/webboards/msg.asp?id=127804

ไม่มีความคิดเห็น:

แสดงความคิดเห็น