ผู้แต่ง: Dflying Chen ( http://dflying.cnblogs.com/ )
บทความชุดก่อนหน้านี้ทั้งหมดเรียกบริการเว็บเดียวโดยตรง อย่างไรก็ตาม ในการพัฒนาโครงการจริง โดยเฉพาะอย่างยิ่งในการแปลงโครงการที่มีอยู่ การแยกตรรกะในเพจออกเป็นบริการเว็บเฉพาะมักจะนำไปสู่การทำงานไม่น้อย Atlas คำนึงถึงสิ่งนี้และอนุญาตให้คุณเพิ่มแอตทริบิวต์ [WebMethod] ให้กับวิธีสาธารณะฝั่งเซิร์ฟเวอร์เพื่ออนุญาตการโทรโดยตรงจาก JavaScript ฝั่งไคลเอ็นต์
เพื่อให้ไคลเอนต์สามารถเรียกวิธีการที่กำหนดไว้ในหน้า ASPX ได้โดยตรง คุณต้องระบุวิธีการเป็นแบบสาธารณะและเพิ่มแอตทริบิวต์ [WebMethod] เช่นวิธีการฝั่งเซิร์ฟเวอร์ต่อไปนี้ที่กำหนดไว้ในไฟล์ ASPX:
<script runat="server">
[วิธีการเว็บ]
สาธารณะ int AddInt (int int1, int int2)
-
กลับ int1 + int2;
-
</สคริปต์>
ในฝั่งไคลเอ็นต์ Atlas จะแมชอัปเมธอด AddInt JavaScript ให้กับคุณ ซึ่งมีอยู่ในเนมสเปซพิเศษ PageMethods เพื่อให้คุณสามารถเรียกเมธอดข้างต้นผ่าน PageMethods.AddInt()
ขณะเดียวกัน ด้วยการกำหนด WebMethod ลงในเพจ ASPX คุณจะสามารถเข้าถึงค่าและ ViewState ของตัวควบคุมฝั่งเซิร์ฟเวอร์บนเพจทั้งหมดในวิธีนี้ได้ด้วย และวงจรชีวิตของทั้งเพจจะเหมือนกับ PostBack เพจ ASP.NET แบบดั้งเดิม เช่น Page_Load วิธีการอื่นๆ ทั้งหมดจะถูกเรียก ช่วยให้เราเข้าถึงเพจได้ดีขึ้น อย่างไรก็ตาม สิ่งนี้ยังนำมาซึ่งส่วนลดประสิทธิภาพด้วย เนื่องจากทุกครั้งที่เรียกใช้ Web Method ค่า ViewState และการควบคุมบนเพจจะถูกส่งกลับไปยังเซิร์ฟเวอร์ และการประมวลผลฝั่งเซิร์ฟเวอร์ของวงจรการใช้งานเพจทั้งหมด จะนานกว่าการประมวลผลแบบบริสุทธิ์ Web Method ที่กำหนดใน ASMX นั้นซับซ้อนกว่ามาก ดังนั้นที่นี่ฉันขอแนะนำให้ใช้ Pure Web Service ให้มากที่สุด โปรดดูที่: ขอแนะนำให้ใช้ Web Service แทน Page Method ในการใช้งานฝั่งเซิร์ฟเวอร์ Atlas
มาดูตัวอย่างกัน ขั้นแรก เรามากำหนด WebMethod ใน ASPX กันก่อน คุณจะเห็นได้ว่าไม่เพียงแต่ค้นหาผลรวมของตัวเลขสองตัวเท่านั้น แต่ยังเข้าถึงค่าของกล่องข้อความฝั่งเซิร์ฟเวอร์บนเพจด้วย:
<script runat="server ">
[วิธีการเว็บ]
AddInt สตริงสาธารณะ (int int1, int int2)
-
return (int1 + int2).ToString() + string.Format("rnAnd the Server TextBox's Text is '{0}'.", tbServer.Text);
-
</สคริปต์>
จากนั้นจะมี ScriptManager ของเพจ ไม่จำเป็นต้องเพิ่มการอ้างอิงใดๆ ที่นี่: <atlas:ScriptManager ID="scriptManager" runat="server" />
จากนั้นมีสองอินพุตที่ใช้เพื่อป้อนส่วนเสริมและอินพุตที่ใช้เพื่อทริกเกอร์การเรียกเซิร์ฟเวอร์:
<input id="value1" type="text" value="1" />
<input id="value2" type="text" value="2" />
<input id="btnAdd" type="button" value="Add!" onclick="return btnAdd_onclick()" />
นอกจากนี้ยังมีกล่องข้อความฝั่งเซิร์ฟเวอร์:
<asp:TextBox ID="tbServer" runat="server" Text="Server control"></asp:TextBox>
สุดท้ายคือการเรียก JavaScript โปรดใส่ใจกับเนมสเปซในตัวของ PageMethods:
function btnAdd_onclick() {
PageMethods.AddInt(
$('value1').ค่า
$('value2').ค่า
เมื่อเสร็จสมบูรณ์
-
-
functionOnComplete (ผลลัพธ์)
-
การแจ้งเตือน (ผลลัพธ์);
-
เรียกใช้ในเบราว์เซอร์ ป้อนส่วนเสริมสองตัว จากนั้นป้อนอักขระบางตัวในกล่องข้อความบนฝั่งเซิร์ฟเวอร์ คลิกเพิ่ม คุณจะเห็นว่ามีการเข้าถึงค่าของกล่องข้อความบนฝั่งเซิร์ฟเวอร์:
นี่คือการส่งผ่านเครือข่ายที่ดักฟังโดย Fiddler คุณจะเห็นว่าทั้ง ViewState และ TextBox ถูกส่งกลับไปยังเซิร์ฟเวอร์:
ซอร์สโค้ดของโปรแกรมตัวอย่างนี้สามารถดาวน์โหลดได้ที่นี่: