มีตัวควบคุม UpdatePanel ใน Atlas ซึ่งรองรับการอัปเดตบางส่วน เพียงระบุ Mode="Conditional" แน่นอนว่า ScriptManager จะต้องตั้งค่า EnablePartialRendering="true" ด้วย
อัปเดตบางส่วนโดยใช้ xmlHttp กระบวนการมีดังนี้:
1: ในระหว่าง postback js ของเพจจะ postback ข้อมูลบนเพจ (ทั้งหน้าจะต้อง postbacked)
2: พื้นหลังได้รับคำขอและเริ่มการประมวลผล (สามารถเรียกใช้การโหลดเพจของเพจได้)
3: หลังจากประมวลผลแล้ว ให้ส่งข้อมูลที่จะอัพเดตกลับไปที่เพจเท่านั้น (กำหนดว่าส่วนใดของข้อมูลที่จะส่งกลับตามชื่อของ UpdatePanel ที่คุณต้องการอัพเดต นี่คือโค้ดของ this.updatePanelXX.Update() )
4: เพจ (ไคลเอนต์) อัปเดตเฉพาะข้อมูล postback ส่วนนี้เท่านั้น (นี่คือสิ่งที่เรียกว่าการอัปเดตบางส่วน วิธีการคือค้นหา updatePanle จากนั้น UpdatePanel.InnerHtml=PostBackData มันเป็นการแทนที่โดยตรง)
จากนี้ มุมมองที่เรียกว่าการอัพเดตบางส่วน อันใหม่คือให้วาดใหม่เฉพาะส่วน updatePanel ที่ระบุเท่านั้น (เมื่อโพสต์กลับไปยังเซิร์ฟเวอร์จะต้องโพสต์ทั้งหน้ากลับ โดยโค้ดพื้นหลังจะประมวลผลแต่ละรายการเหมือนเดิม แต่เพียงบางส่วนเท่านั้น ของผลการประมวลผลจะถูกส่งกลับไปยังลูกค้า)
ด้วยวิธีนี้ จะเป็นเรื่องยากมากหากคุณต้องการทริกเกอร์การประมวลผล js ของเพจในขณะที่ UpdatePanle กำลังประมวลผล เนื่องจากข้อมูลทั้งหมดที่คุณโพสต์กลับได้รับการอัปเดตเป็นมุมเล็กๆ การ Response.Write(js) ก่อนหน้านี้จะไม่ทำงานเลย
วิธีแก้ไขคือ:
this.Page.ClientScript.RegisterStartupScript(this.GetType(), "OpenOverViewPart", openScript); ใช้เมธอด RegisterStartupScript เพื่อลงทะเบียนฟังก์ชัน js จากนั้นจึงสามารถดำเนินการได้อย่างราบรื่น
ในความเป็นจริง การดำเนินการไม่ราบรื่นนัก เพราะหลังจากที่ Atlas ดำเนินการอัปเดตบางส่วน มันจะรวม js ทั้งหมดบนเพจไว้ด้วยกัน---คำนึงถึงธุรกิจของคุณเอง---ดังนั้นมันจะทำให้เกิดผลกระทบเล็กน้อย: js จำนวนมากมีเช่น <! - และสัญลักษณ์ความคิดเห็นอื่นๆ ถ้าคุณไม่ระวัง js ของคุณเองก็จะถูกแสดงความคิดเห็นด้วย นี่เป็นเรื่องที่ลำบากกว่าจริงๆ
วิธีแก้ไขคือ X คุณต้องควบคุมรูปแบบเอาต์พุต js ด้วยตัวเองและเพิ่มการขึ้นบรรทัดใหม่อีกสองสามรายการเพื่อแสดงว่าไม่ใช่ความคิดเห็น
สตริง openScript = "nt";
openScript = "<script" + " type='text/javascript'>rn"
+ "rn"
+ "var a=0;rn"
+ "opener.top.__doPostBack('" + Request.Params["refresh"] + "','refresh');rn"
+ "window.opener.focus();"
+ "หน้าต่าง.ปิด();"
+ "<" + "/สคริปต์" + ">";