Thursday, August 27, 2009

Client Script on Code behind ASP.NET

  • คือจะกำหนด ค่าใส่ session
  • หลังจากนั้นทำการเรียก page อื่น ซึ่งใน page อื่นต้องได้ค่า ของ session
  • ทำไมเราเรียกใช้ function javascript ผ่าน property OnClientClick แล้วค่าที่ได้ครั้งแรกจะตรง
  • แต่พอครั้งต่อไป ไม่ตรงต้องรีเฟรช ถึงจะได้ค่าล่าสุดงง
  • หรือ ลองเขียนโค้ดฝั่ง server กำหนดค่าให้ session ที่ aspx อาการก็เหมือนกับเรียกใช้ OnClientClick คือ ครั้งแรก ถูกแต่ครั้งต่อไป ไม่ถูกต้อง ต้องรีเฟรชถึงจะใช่

Method 1
  • ส่งค่าผ่านทาง querystring สิ
  • ซึ่งเราไม่ต้องการแบบนี้หว่า

Method 2
  • หรือ ถ้าต้องส่งผ่าน session จริงก็เรียก client script ใน code behind click event เลย ซึ่ง OnClientClick property เราไม่ต้องใส่อาไรนะ
  • Page.Regis... จะเก่าแหละ เค้าแนะนำให้ใช้ ClientScript.Regis... แทน
  • สรุปใช้แบบใหนก็ได้มั้ง เพราะ ทดสอบดู การ get ค่า session จากหน้าที่ถูกเรียกจะได้ค่าถูกต้อง
ตัวอย่างเพิ่มเติม

Page.ClientScript.RegisterStartupScript( Page.GetType(), null, "<script>ShowMsgTest();</script>" ,false);

มี 4 พารามิเตอร์
type ก็คือ ที่ register script เรา( แต่ลองใช้ type อย่างอื่นมันก็ได้ ????)

key ก็คือ keyสำหรับ script ไม่ใช้ก็ใส่ null
script คือ script เราครับ
addScriptTag ถ้าเป็น true ก็ไม่ต้องใส่ <script></<script> ครอบใน Script เราครับ

Page .ClientScript .RegisterStartupScript( Page.GetType(), null, "ShowMsgTest();" ,true);

//---------------

หากไม่อยาก Include Javascript หน้า html ลองใช้ ตอน โหลดก็ได้ครับ

Page.ClientScript.RegisterClientScriptInclude( Page.GetType(), null,./js/JScript.js" );

แต่มันไม่ยอมทำงานถ้า มันอยู่ใน IsPostBack ครับ ????

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack) {

Page.ClientScript.RegisterClientScriptInclude( Page.GetType(), null,"./js/JScript.js" );

}

}
//------------------
ปล. แต่ก็ระวังเรื่องการใช้ Script ชื่อเดียวกัน ใน page มันจะแสดงได้แค่อันเดียวครับ เช่น


protected void Button2_Click( object sender, EventArgs e ) {

Page.ClientScript.RegisterStartupScript( this.GetType() , null, "<script>ShowMsgTest();</script>", false );

Page.ClientScript.RegisterStartupScript( this.GetType(), null, "<script>ShowMsgTest();</script>", false );
}
จะแสดง แค่ 1 MessageBox ครับ ซึ่งถ้าอยอากให้แสดง 2 อันเลยต้องใส่ key ให้มันครับ

Page.ClientScript.RegisterStartupScript( this.GetType() , "msg1", "<script>ShowMsgTest();</script>", false );

Page.ClientScript.RegisterStartupScript( this.GetType(), "msg2", "<script>ShowMsgTest();</script>", false );

เราอาจตรวจสอบว่า script เราเคย register ไปแล้วยังได้จาก Page.ClientScript.IsStartupScriptRegiste

หรือ
ScriptManager.RegisterStartupScript(Page, typeof(Page), "key1", "window.open('http://www.yahoo.com')", true);

อ้างอิง



No comments:

Post a Comment