สมาชิกที่ลงทะเบียนและสร้างฐานข้อมูลการพัฒนาเว็บของคุณ
แบบฟอร์ม HTML มาตรฐาน (องค์ประกอบแบบฟอร์ม) อนุญาตให้คุณส่งผ่านและส่งข้อมูลข้อมูลไปยังหน้าอื่นหรือแอปพลิเคชันเพื่อใช้องค์ประกอบแบบฟอร์ม ใน ASP.NET 1.x เว็บเพจใช้กลไกการจัดส่งเพื่อส่งข้อมูลหน้าไปยังหน้าเว็บเอง สำหรับ ASP.NET 2.0 ฟังก์ชั่นของมันมีการขยายและสามารถอนุญาตให้ส่งผ่านหน้าเว็บได้ มาพูดคุยเรื่องฟีเจอร์ใหม่นี้ในสัปดาห์นี้
วิธีการดั้งเดิม
เพื่ออำนวยความสะดวกในการเปรียบเทียบฉันต้องการใช้เวลาหนึ่งนาทีในการตรวจสอบวิธีการเก่าในการส่งข้อมูลจากหน้าเว็บ องค์ประกอบตารางของ HTML มีแอตทริบิวต์การดำเนินการเพื่อระบุทรัพยากรที่เรียกว่าทรัพยากรที่เรียกว่าหน้าเว็บสคริปต์โปรแกรม ฯลฯ ) เพื่อจัดการข้อมูลที่ส่งเหล่านี้ รหัสต่อไปนี้เป็นตัวอย่าง
<html>
<head> <title> ตัวอย่าง HTML แบบฟอร์ม </title> </head>
<body>
<form name = "frmsample" method = "post" action = "target_url">
<อินพุต type = "text" name = "fullName" id = "fullName" />>
<input type = "button" name = "subment" value = "ส่ง" /> />
</form>
</body> </html>
ค่าที่ป้อนในโดเมนข้อความ (ชื่อคือ FullName) จะถูกส่งไปยังหน้าหรือโปรแกรมที่ระบุโดยแอตทริบิวต์การกระทำขององค์ประกอบหน่วย สำหรับนักพัฒนา ASP.NET มันเป็นเรื่องแปลกอย่างยิ่งแม้ว่าพวกเขาจะใช้แบบฟอร์ม HTML มาตรฐาน
เมื่อนักพัฒนา ASP.NET กำลังเผชิญหน้ากับงานของการส่งข้อมูลข้อมูลจากหน้าเว็บหนึ่งไปยังอีกหน้าหนึ่งห้องพักสำหรับการเลือกนั้นกว้างมาก พวกเขารวมถึงตัวแปรเซสชัน, คุกกี้, ตัวแปร querystring, แคชแคช) และแม้แต่เซิร์ฟเวอร์การถ่ายโอน แต่ ASP.NET 2.0 ยังมีตัวเลือกอื่น
ASP.NET 2.0 เป็นอีกวิธีหนึ่งในการให้บริการ
เมื่อออกแบบ ASP.NET 2.0 Microsoft ตระหนักถึงความต้องการของการข้ามข้อมูลระหว่างหน้าเว็บ ด้วยจิตสำนึกนี้แอตทริบิวต์ postbackurl จะถูกเพิ่มลงในการควบคุมปุ่ม (ปุ่ม) ของ ASP.NT ช่วยให้คุณระบุตำแหน่งที่ฟอร์มและข้อมูลด้านบนถูกส่งเมื่อส่งผู้ใช้ (นั่นคือค่า URL ที่ระบุโดยคุณสมบัติ postbackurl) โดยทั่วไปแล้วการส่งผ่านหน้าข้ามหน้าเป็นกระบวนการของการใช้จาวาสคริปต์ในพื้นหลัง
< %@ page language = "vb" %><!
<html> <head>
<title> ตัวอย่างข้ามโพสต์แบ็ก </title>
</head> <body>
<form id = "frmcrosssspostback1" method = "post" runat = "เซิร์ฟเวอร์">
<asp: label id = "lblName" runat = "เซิร์ฟเวอร์" text = "ชื่อ:"> </asp: label>
<asp: textbox id = "txtname" runat = "เซิร์ฟเวอร์"> < /asp: textbox> <br />
<asp: label id = "lble-mailaddress" runat = "เซิร์ฟเวอร์" text = "อีเมล:"> </asp: label>
<asp: textbox id = "txte-mailaddress" runat = "เซิร์ฟเวอร์"> < /asp: textbox> <br />
<ASP: ปุ่ม ID = "BTNSUBMIT" runat = "เซิร์ฟเวอร์" text = "ส่ง" postbackurl = "crossPostBack2.aspx" />
</form> </body> </html>
หน้า ASP.NET ในหน้า ASP.NET มีสองโดเมนข้อความ (ชื่อชื่อ (ชื่อ) และอีเมล (อีเมล) และปุ่ม (ปุ่ม) ที่ใช้ในการส่งข้อมูล แอตทริบิวต์ postback ของปุ่มส่งนี้ถูกระบุเป็นหน้าเว็บอื่นดังนั้นเมื่อส่งแบบฟอร์มข้อมูลสามารถส่งไปยังหน้านั้นได้ หมายเหตุ: ในตัวอย่างนี้องค์ประกอบของฟอร์มถูกตั้งค่าโดยแอตทริบิวต์ posthod โดยการตั้งค่าแอตทริบิวต์วิธีการเพื่อให้โพสต์ [2] วิธีการส่งในระหว่างการส่ง แต่ไม่จำเป็นเพราะการส่งข้ามทั้งหมด (การจัดส่งข้ามหน้า) ใช้ วิธีการโพสต์ตามการออกแบบ
ใช้หน้าก่อนหน้า
เมื่อหน้า ASP.NET ถูกโหลดผ่านการโทรของการส่งข้ามหน้าเว็บแอตทริบิวต์ isPostBack ของวัตถุบนมันจะไม่ถูกทริกเกอร์ อย่างไรก็ตามมีแอตทริบิวต์ที่เรียกว่าหน้าก่อนหน้า (หน้าก่อนหน้า) ช่วยให้คุณสามารถเข้าถึงและใช้ผู้ที่ใช้การจัดส่งข้ามหน้า
เมื่อใดก็ตามที่มีการร้องขอข้ามหน้าคุณสมบัติหน้าก่อนหน้าของหน้าปัจจุบันจะถูกเก็บรักษาไว้เพื่ออ้างอิงหน้าเว็บที่ส่งมอบ หากการสร้างหน้าไม่ได้มาจากการกระตุ้นการส่งมอบข้ามหน้าหรือหน้าอยู่ในกลุ่มโปรแกรมที่แตกต่างกันคุณสมบัติหน้าก่อนหน้าจะไม่เริ่มต้น
คุณสามารถตรวจสอบได้ว่าการโหลดหน้าเว็บเป็นผลมาจากการส่งข้ามหน้าโดยตรวจสอบวัตถุหน้าก่อนหน้าหรือไม่ หากค่าเป็นโมฆะหมายความว่ามันเป็นโหลดธรรมดาไม่ใช่ค่า NULL บ่งชี้ว่าเว็บเพจมาจากการส่งข้ามหน้า นอกจากนี้คลาสหน้ายังมีวิธีที่เรียกว่า IscrossspagePostback ซึ่งใช้โดยเฉพาะเพื่อตรวจสอบว่าหน้านั้นเป็นผลมาจากการส่งข้ามหน้าหรือไม่
เมื่อคุณได้รับการพิจารณาแล้วคุณสามารถเข้าถึงการควบคุมในหน้าการโทรโดยวิธีการค้นหาของวัตถุหน้าก่อนหน้า รหัสต่อไปนี้เป็นหน้าสองในตัวอย่างของเรา
< %@ page language = "vb" %><!
<html> <head>
<title> ข้ามโพสต์แบ็กตัวอย่าง 2 </title>
</head> <body>
<script language = "vb" runat = "เซิร์ฟเวอร์">
sub page_load ()
ถ้าไม่ใช่ (Page.PreviousPage ไม่มีอะไร) แล้ว)
ถ้าไม่ใช่ (page.iscrosspagepostback) แล้ว
response.write ("ชื่อ: + ctype (previouspage.findcontrol (" txtname "), textbox .text +" <br>)
Response.write ("อีเมล:" + ctype (PreviousPage.findControl ("txte-mailaddrss"), กล่องข้อความ) .Text + "<br>")
สิ้นสุดถ้า
สิ้นสุดถ้า
สิ้นสุดย่อย
</script> </body> </html>
หน้านี้กำหนดว่าจะถูกเรียกโดยการส่งข้ามหน้าหรือไม่ ถ้าเป็นเช่นนั้นให้เข้าถึงค่าจากหน้าโทรผ่านวิธีการค้นหาและแปลงการควบคุมที่ได้จากวิธีนี้เป็นตัวควบคุมกล่องข้อความจากนั้นแสดงเนื้อหาของแอตทริบิวต์ข้อความ (ข้อความ) ของพวกเขา
คุณสามารถแปลงวัตถุหน้าก่อนหน้าทั้งหมดเป็นประเภทหน้าเว็บที่ทริกเกอร์การส่งข้ามหน้า วิธีนี้ช่วยให้คุณสามารถเข้าถึงหน้าของหน้าและวิธีการของหน้า ก่อนที่ฉันจะยกตัวอย่างเทคโนโลยีนี้ฉันต้องเขียนตัวอย่างแรกใหม่เพื่อรวมคุณลักษณะทั่วโลก รหัสต่อไปนี้เป็นรายการแรกของสองแอตทริบิวต์
< %@ page language = "vb" %><!
<html> <head>
<title> ตัวอย่างข้ามโพสต์แบ็ก </title>
<script language = "vb" runat = "เซิร์ฟเวอร์">
ชื่ออสังหาริมทรัพย์สาธารณะอย่างเดียว
รับ
return me.txtname.text
จบลง
จุดสิ้นสุดของทรัพย์สิน
อีเมลสาธารณะแบบอ่านอย่างเดียว
รับ
return me.txte-mailaddress.text
จบลง
จุดสิ้นสุดของทรัพย์สิน
</script> </head> <body>
<form id = "frmcrosssspostback1" method = "post" runat = "เซิร์ฟเวอร์">
<asp: label id = "lblName" runat = "เซิร์ฟเวอร์" text = "ชื่อ:"> </asp: label>
<asp: textbox id = "txtname" runat = "เซิร์ฟเวอร์"> < /asp: textbox> <br />
<asp: label id = "lble-mailaddress" runat = "เซิร์ฟเวอร์" text = "อีเมล:"> </asp: label>
<asp: textbox id = "txte-mailaddress" runat = "เซิร์ฟเวอร์"> < /asp: textbox> <br />
<ASP: ปุ่ม ID = "BTNSUBMIT" runat = "เซิร์ฟเวอร์" text = "ส่ง" postbackurl = "crossPostBack2.aspx" />
</form> </body> </html>
ตอนนี้คุณลักษณะได้ถูกสร้างขึ้นแล้วคุณสามารถเข้าถึงได้อย่างง่ายดาย ในการเฝ้าระวังวัตถุหน้า Prevent Prevent Prevent จะต้องถูกแปลงเป็นประเภทที่ถูกต้องเพื่อเข้าถึงแอตทริบิวต์ของมันอย่างถูกต้อง สิ่งนี้สามารถนำไปใช้งานได้โดยการแปลงเป็นคลาสเพจที่เหมาะสม
<%@ page language = "vb"%>< %@ หน้าอ้างอิง = "~/crosspostback1.aspx" %>
<!
<html> <head>
<title> ข้ามโพสต์แบ็กตัวอย่าง 3 </title>
</head> <body>
<script language = "vb" runat = "เซิร์ฟเวอร์">
sub page_load ()
dim cpppage เป็น crosspostback1_aspx
ถ้าไม่ใช่ (Page.PreviousPage ไม่มีอะไร) แล้ว)
ถ้าไม่ใช่ (page.iscrosspagepostback) แล้ว
if (page.previouspage.isvalid) จากนั้น
CPPPAGE = CTYPE (ก่อนหน้า
Response.write ("ชื่อ: + cppppage.name +" <br> ")
Response.write ("อีเมล:" + cpppage.e-mailadddress)
สิ้นสุดถ้า
สิ้นสุดถ้า
สิ้นสุดถ้า
สิ้นสุดย่อย
</script> </body> </html>
อธิบายสิ่งนี้มันกำหนดการอ้างอิงไปยังหน้าการโทรบนหัวหัวเพื่อให้สามารถใช้ประเภทการอ้างอิงนี้ในรหัส ผ่านการอ้างอิงนี้รหัส VB.NET จริงใช้ฟังก์ชัน CTYPE เพื่อแปลงวัตถุหน้าก่อนหน้าเป็นประเภทที่เหมาะสม หลังจากนั้นแอตทริบิวต์เหล่านั้นสามารถใช้เช่นการสาธิตรหัส
การใช้วิธี isvalid ของวัตถุก่อนหน้าในรายการด้านบนได้รับการเตือนที่นี่: คุณสมบัติ isvalid ในหน้าก่อนหน้าทำให้มั่นใจได้ว่าคุณได้ผ่านการตรวจสอบและทดสอบทางกฎหมายทั้งหมดก่อนที่จะดำเนินการ
สรุป
มีแอปพลิเคชันมากมายสำหรับการส่งพารามิเตอร์ข้อมูลระหว่างเว็บรวมถึงการบำรุงรักษาข้อมูลผู้ใช้ส่วนบุคคล โซลูชันเว็บบรรพบุรุษเช่นการใช้ QueryString และคุกกี้ช่วยให้คุณสามารถชี้ไปที่หน้าอื่นจากหน้าหนึ่งเมื่อมีการส่ง
ASP.NET 1.1 นอกเหนือจากการให้วิธีการเพิ่มเติมแล้ววิธีการเหล่านี้ยังสามารถได้รับการสนับสนุนอย่างดี แต่ ASP.NET 2.0 ขึ้นอยู่กับการส่งมอบข้ามหน้าซึ่งทำให้การพัฒนาที่ยอดเยี่ยมในเรื่องนี้ มันทำให้ข้อมูลการประมวลผลเว็บหนึ่งรายการจากหน้าเว็บอื่นง่าย เมื่อคุณพัฒนาโปรแกรม ASP.NET 2.0 ครั้งต่อไปคุณต้องใช้ประโยชน์จากข้อดีของแนวคิดใหม่นี้เป็นอย่างดี