ส่ง asp ไร้ความปราณี ย้อนกลับข้อมูลอัตโนมัติ

รูปร่าง

ตระกูล รูปร่างดึงค่าขององค์ประกอบแบบฟอร์มที่ส่งในเนื้อหาของคำขอ HTTP โดยใช้แบบฟอร์มที่ใช้เมธอด POST

ไวยากรณ์

คำขอแบบฟอร์ม (องค์ประกอบ) [(ดัชนี) |.นับ]

ตัวเลือก

องค์ประกอบ

ชื่อขององค์ประกอบแบบฟอร์มที่ครอบครัวดึงค่า

ดัชนี

พารามิเตอร์เผื่อเลือกที่อนุญาตให้เข้าถึงค่าพารามิเตอร์ค่าใดค่าหนึ่งจากหลายค่า สามารถเป็นจำนวนเต็มระหว่าง -1 ถึง คำขอแบบฟอร์ม (พารามิเตอร์).นับ.

หมายเหตุ

ตระกูล รูปร่างจัดทำดัชนีโดยชื่อพารามิเตอร์ในเนื้อหาคำขอ ความหมาย คำขอแบบฟอร์ม (องค์ประกอบ) เป็นอาร์เรย์ของค่าทั้งหมด องค์ประกอบ,ที่ปรากฏอยู่ในเนื้อความของคำร้อง คุณสามารถกำหนดจำนวนของค่าพารามิเตอร์ได้โดยการโทร คำขอแบบฟอร์ม (องค์ประกอบ).นับ. หากพารามิเตอร์ไม่มีค่าที่เกี่ยวข้องหลายค่า ตัวนับจะเป็น 1 หากไม่พบพารามิเตอร์ ตัวนับจะเป็น 0

เมื่อต้องการอ้างถึงค่าเดียวขององค์ประกอบแบบฟอร์มที่มีหลายค่า คุณต้องระบุค่าสำหรับ ดัชนี. พารามิเตอร์ ดัชนีสามารถเป็นจำนวนใดก็ได้ระหว่าง 1 ถึง 1 คำขอแบบฟอร์ม (องค์ประกอบ).นับ. หากพารามิเตอร์ฟอร์มตัวใดตัวหนึ่งถูกอ้างอิงโดยไม่มีค่า ดัชนีข้อมูลจะถูกส่งกลับเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาค

เมื่อไร คำขอแบบฟอร์มใช้กับพารามิเตอร์ เว็บเซิร์ฟเวอร์จะแยกวิเคราะห์เนื้อหาของคำขอ HTTP และส่งคืนข้อมูลที่ระบุ หากแอปพลิเคชันของคุณต้องการข้อมูลที่แยกวิเคราะห์จากฟอร์ม คุณสามารถเข้าถึงได้โดยการโทร คำขอแบบฟอร์มโดยไม่มีพารามิเตอร์

บันทึก. เมื่อทำงานกับ ASP และส่งข้อมูลจำนวนมากเกิน 100 KB วิธีการ คำขอแบบฟอร์มไม่สามารถใช้งานได้ หากแอปพลิเคชันของคุณต้องการส่งข้อมูลเกินขีดจำกัดนี้ คุณสามารถสร้าง bean ที่ใช้ Request.BinaryRead.

เป็นไปได้ที่จะวนซ้ำค่าข้อมูลทั้งหมดในคำขอแบบฟอร์ม ตัวอย่างเช่น หากผู้ใช้กรอกแบบฟอร์มโดยระบุค่าสองค่า ได้แก่ ช็อกโกแลตและบัตเตอร์สกอตช์ สำหรับองค์ประกอบ FavoriteFlavor คุณสามารถแยกค่าเหล่านั้นโดยใช้สคริปต์ด้านล่าง

สำหรับ i = 1 To Request.Form("FavoriteFlavor").Count

Response.Write Request.Form("FavoriteFlavor")(i) & "
"

สคริปต์ด้านบนจะแสดงข้อมูลต่อไปนี้

คุณสามารถใช้เทคนิคนี้เพื่อแสดงชื่อพารามิเตอร์ตามที่แสดงในสคริปต์ด้านล่าง

สำหรับ i = 1 ถึง Request.Form("FavoriteFlavor").count %>

แบบฟอร์มคำขอ(FavoriteFlavor) =<%= Request.Form("FavoriteFlavor")(i)_
%>

สคริปต์นี้จะแสดงสิ่งต่อไปนี้ในเบราว์เซอร์:

แบบฟอร์มคำขอ (FavoriteFlavor) = ช็อกโกแลต

แบบฟอร์มคำขอ (FavoriteFlavor) = Butterscotch

ตัวอย่าง

พิจารณาแบบฟอร์มต่อไปนี้:

ชื่อจริงของคุณ:

ไอศกรีมรสโปรดของคุณคือรสอะไร:

สามารถส่งเนื้อหาคำขอต่อไปนี้จากแบบฟอร์มนี้:

ชื่อ = เจมส์ & รส = Rocky + Road

จากนั้นสามารถใช้สคริปต์ด้านล่าง:

ยินดีต้อนรับ,<%= Request.Form("firstname") %>.

รสโปรดของคุณคือ<%= Request.Form("flavor") %>.

ผลลัพธ์จะมีลักษณะดังนี้:

ยินดีต้อนรับ เจมส์ รสโปรดของคุณคือ Rocky Road

หากคุณใช้สคริปต์ด้านล่าง:

ข้อมูลแบบฟอร์มที่ไม่ได้แยกวิเคราะห์คือ:<%= Request.Form %>

ผลลัพธ์จะมีลักษณะดังนี้:

ข้อมูลแบบฟอร์มที่ไม่ได้แยกวิเคราะห์คือ: firstname=James&flavor=Rocky+Road

บันทึก.หากฟอร์มมีหลายออบเจ็กต์ที่มีชื่อเดียวกัน (เช่น แท็ก HTML SELECT) องค์ประกอบในกลุ่มของฟอร์มจะเป็นรายการค่าที่เลือกทั้งหมดโดยคั่นด้วยเครื่องหมายจุลภาค

พื้นที่ใช้งาน

ดูสิ่งนี้ด้วย

ใบรับรองลูกค้า _ใบรับรองลูกค้า คุ้กกี้ _คุกกี้_คำขอ QueryString _QueryString ตัวแปรเซิร์ฟเวอร์ _ตัวแปรเซิร์ฟเวอร์

โมเดล ASP.NET

แบบฟอร์ม HTML

ผู้ที่คุ้นเคยกับภาษา HTML จะรู้ว่ามากที่สุด ด้วยวิธีง่ายๆการส่งข้อมูลไคลเอนต์ไปยังเซิร์ฟเวอร์คือการใช้ตัวจัดการ . ภายในด้ามจับ สามารถวางคำอธิบายได้ เป็นตัวแทนของผู้อื่น องค์ประกอบพื้นฐานส่วนติดต่อผู้ใช้ เช่น ปุ่ม ฟิลด์ข้อความ กล่องรายการ และปุ่มตัวเลือก

ตัวอย่างเช่น ด้านล่างนี้คือหน้า HTML ที่มีแบบฟอร์มที่มีช่องข้อความสองช่อง ช่องทำเครื่องหมายสองช่อง และปุ่มส่ง เช่น เพียงห้าคำอธิบาย :

สำรวจ

ใส่ชื่อของคุณ:
ใส่นามสกุล:

คุณกำลังตั้งโปรแกรมอะไรอยู่?
ค#
วีบี.เน็ต



รูปภาพแสดงหน้าตาที่เรียบง่ายนี้ในหน้าต่างเว็บเบราว์เซอร์:

เมื่อผู้ใช้คลิกปุ่มส่งเบราว์เซอร์จะดึงค่าปัจจุบันของแต่ละตัวควบคุมและสร้างสตริงยาวจากค่าเหล่านั้น สตริงนี้จะถูกส่งไปยังเพจที่ระบุในแฮนเดิล

(ในกรณีนี้คือ page.aspx) โดยใช้การดำเนินการ HTTP POST ในตัวอย่างนี้ หมายความว่าเว็บเซิร์ฟเวอร์สามารถรับคำขอด้วยบรรทัดข้อมูลต่อไปนี้:

FirstName=Vasily&LastName=Pupkin&CS=on&VB=on

เมื่อสร้างสตริงนี้ เบราว์เซอร์จะปฏิบัติตามกฎบางอย่าง ข้อมูลจะถูกส่งเป็นลำดับของคู่ชื่อ/ค่าที่คั่นด้วยเครื่องหมายแอมเปอร์แซนด์ (&) เสมอ ภายในคู่ ชื่อจะถูกแยกออกจากค่าด้วยเครื่องหมายเท่ากับ (=) ช่องทำเครื่องหมายจะถูกละเว้นจนกว่าจะถูกเลือก ซึ่งในกรณีนี้เบราว์เซอร์จะส่งข้อความเป็นค่า ข้อมูลเต็มเกี่ยวกับมาตรฐานรูปแบบ HTML ที่รองรับในทุกเบราว์เซอร์ปัจจุบันได้ที่ W3C - Forms

เฟรมเวิร์กการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์เกือบทั้งหมดจะเพิ่มเลเยอร์ของสิ่งที่เป็นนามธรรมให้กับข้อมูลแบบฟอร์มดิบ พวกเขาแบ่งบรรทัดนั้นและนำเสนอด้วยวิธีที่เป็นประโยชน์มากขึ้น ตัวอย่างเช่น JSP, ASP และ ASP.NET อนุญาตให้คุณดึงค่าของตัวควบคุมฟอร์มโดยใช้เลเยอร์วัตถุบาง ใน ASP และ ASP.NET สามารถค้นหาค่าได้จากชื่อใน ขอแบบฟอร์มรวบรวม. หากเราแปลงหน้าก่อนหน้าเป็นเว็บฟอร์ม ASP.NET วิธีการนี้สามารถใช้กับโค้ดดังนี้:

สตริง firstName = Request.Form["ชื่อแรก"];

"เลเยอร์" บางๆ ที่ด้านบนของข้อความ POST นี้มีประโยชน์ แต่ก็ยังห่างไกลจากโครงสร้างเชิงวัตถุที่แท้จริง นั่นเป็นเหตุผลที่ ASP.NET ก้าวไปอีกขั้น เมื่อโพสต์เพจกลับไปยังสภาพแวดล้อม ASP.NET เพจจะดึงค่า เติมคอลเล็กชันฟอร์ม (สำหรับความเข้ากันได้ย้อนหลังกับรหัส ASP) จากนั้นกำหนดค่าวัตถุควบคุมที่เหมาะสม ซึ่งหมายความว่าสามารถใช้ไวยากรณ์ที่มีความหมายมากขึ้นต่อไปนี้เพื่อดึงข้อมูลจากเว็บฟอร์ม ASP.NET:

สตริงชื่อแรก = txtFirstName.Text;

รหัสนี้ยังมีประโยชน์ในด้านความปลอดภัยประเภท กล่าวอีกนัยหนึ่ง เมื่อคุณเรียกสถานะของช่องทำเครื่องหมาย คุณจะได้ค่าบูลีนเป็นจริงหรือเท็จแทนคำว่า on เป็นผลให้นักพัฒนาถูกแยกออกจากคุณลักษณะเฉพาะของไวยากรณ์ HTML

ใน ASP.NET การควบคุมทั้งหมดจะอยู่ในที่จับแยกต่างหาก . หมายเลขอ้างอิงนี้ถูกทำเครื่องหมายด้วยแอตทริบิวต์ runat="server" ซึ่งอนุญาตให้ทำงานบนเซิร์ฟเวอร์ ASP.NET ไม่อนุญาตให้สร้างเว็บฟอร์มที่มีตัวจัดการเซิร์ฟเวอร์มากกว่าหนึ่งตัว แม้ว่าจะสามารถสร้างหน้าที่ส่งข้อมูลไปยังหน้าอื่นๆ โดยใช้เทคโนโลยีการส่งข้ามหน้าก็ตาม

ส่วนติดต่อผู้ใช้แบบไดนามิก

ไม่ต้องสงสัยเลยว่า โมเดลการควบคุมช่วยให้ดึงข้อมูลเกี่ยวกับฟอร์มได้ง่ายขึ้น ที่น่าทึ่งยิ่งกว่านั้น มันทำให้ชีวิตง่ายขึ้นเมื่อคุณต้องการเพิ่มข้อมูลลงในเพจ คุณสมบัติการควบคุมเว็บเกือบทั้งหมดสามารถอ่านและตั้งค่าได้ ซึ่งหมายความว่า ตัวอย่างเช่น สามารถตั้งค่าคุณสมบัติ Text ของช่องข้อความได้ง่ายๆ เช่นเดียวกับการอ่าน

ตัวอย่างเช่น พิจารณาว่าจะเกิดอะไรขึ้นหากคุณกำลังจะอัปเดตข้อความบนหน้าเว็บให้สะท้อนข้อมูลบางอย่างที่ผู้ใช้ป้อนไว้ก่อนหน้านี้ ใน ASP แบบคลาสสิก คุณต้องหาตำแหน่งที่สะดวกในการแทรกบล็อกสคริปต์ที่เขียนโค้ด HTML ต่อไปนี้เป็นข้อมูลโค้ด ASP.NET ที่ใช้เทคนิคนี้เพื่อแสดงข้อความต้อนรับที่มีสีสันสดใส:

ข้อความสตริง = " ยินดีต้อนรับ " + txtFirstName.Text + " " + txtLastName.Text + ""; Response.Write(ข้อความ);

ในทางกลับกัน สถานการณ์จะง่ายขึ้นเมื่อกำหนดตัวควบคุมฉลาก (ฉลาก) ใน ASP.NET:

ตอนนี้คุณสามารถตั้งค่าคุณสมบัติของมันได้:

Label1.Text = "ยินดีต้อนรับ" + txtFirstName.Text + " " + txtLastName.Text; Label1.ForeColor = Color.Red;

รหัสนี้มีข้อดีหลายประการ อย่างแรกคือเขียนได้ง่ายกว่ามาก (และไม่มีข้อผิดพลาด) ในตัวอย่างนี้ เงินออมมีเพียงเล็กน้อย แต่จะกลายเป็นสิ่งสำคัญมากหากเราคำนึงถึง เต็มหน้า ASP.NET ที่ต้องการแก้ไขบล็อก HTML ที่ซับซ้อนแบบไดนามิกที่มีลิงก์ รูปภาพ และสไตล์

ประการที่สอง โค้ดที่ใช้การควบคุมนั้นง่ายกว่ามากที่จะวางไว้ในเพจ คุณสามารถเขียนรหัส ASP.NET ได้ไม่ว่าจะมีการกระทำที่สอดคล้องกันที่ใด ในทางกลับกัน ในกรณีของ ASP แบบคลาสสิก คุณจะต้องดูแลเลย์เอาต์ของเนื้อหาในเพจและตำแหน่งที่เหมาะสมของโค้ดบล็อคสคริปต์ หากหน้ามีพื้นที่ไดนามิก อาจกลายเป็นบล็อกสคริปต์ที่ไม่เกี่ยวข้องและไม่เป็นระเบียบได้

ข้อดีอีกประการหนึ่ง (มองเห็นได้น้อยกว่า แต่มีความสำคัญมากกว่า) ของโมเดลการควบคุมคือวิธีการซ่อนรายละเอียด HTML ระดับต่ำ สิ่งนี้ไม่เพียงทำให้สามารถเขียนโค้ดได้โดยไม่ต้องเรียนรู้ข้อมูลเฉพาะทั้งหมดของ HTML เท่านั้น แต่ยังช่วยให้หน้าต่างๆ รองรับเบราว์เซอร์ได้หลากหลายมากขึ้น เนื่องจากตัวควบคุมแสดงผลเอง จึงมีความสามารถในการปรับแต่งเอาต์พุตให้รองรับเบราว์เซอร์ต่างๆ คุณลักษณะฝั่งไคลเอ็นต์ขั้นสูง หรือแม้แต่มาตรฐานอื่นๆ ที่เกี่ยวข้องกับ HTML เช่น XHTML หรือ WML ด้วยเหตุนี้ โค้ดจึงไม่เชื่อมโยงโดยตรงกับมาตรฐาน HTML อีกต่อไป

โมเดลเหตุการณ์ ASP.NET

เทคโนโลยี ASP แบบคลาสสิกใช้ โมเดลเชิงเส้นกำลังประมวลผล. ซึ่งหมายความว่าโค้ดของเพจได้รับการประมวลผลตั้งแต่ต้นจนจบและดำเนินการตามลำดับ เนื่องจากโมเดลนี้ นักพัฒนาที่ใช้เทคโนโลยี ASP แบบคลาสสิกจึงต้องเขียนโค้ดในปริมาณที่เหมาะสม แม้แต่สำหรับเพจธรรมดาๆ

ตัวอย่างทั่วไปคือหน้าเว็บที่มีปุ่มส่งที่แตกต่างกันสามปุ่มสำหรับการดำเนินการที่แตกต่างกันสามแบบ ในกรณีเช่นนี้ โค้ดสคริปต์ต้องแยกให้ชัดเจนว่าปุ่มใดถูกคลิกเมื่อส่งเพจ จากนั้นจึงกำหนดและดำเนินการที่เหมาะสมตามตรรกะแบบมีเงื่อนไข

ASP.NET ทำให้สิ่งต่างๆ ง่ายขึ้นด้วยการนำเสนอ รูปแบบการประมวลผลที่ขับเคลื่อนด้วยเหตุการณ์. ในโมเดลนี้ นักพัฒนาจะเพิ่มการควบคุมลงในเว็บฟอร์มก่อน แล้วจึงตัดสินใจว่าเหตุการณ์ใดที่พวกเขาต้องการตอบสนอง ตัวจัดการเหตุการณ์แต่ละตัวเป็นวิธีการที่แยกจากกัน ทำให้โค้ดของเพจดูเรียบร้อยและเป็นระเบียบ

โมเดลนี้ไม่ใช่ของใหม่ แต่ก่อนการกำเนิดของ ASP.NET มันถูกใช้เฉพาะในด้านการเขียนโปรแกรมส่วนต่อประสานผู้ใช้แบบหน้าต่างสำหรับแอปพลิเคชันไคลเอนต์ที่หลากหลาย เหตุการณ์ทำงานใน ASP.NET อย่างไร ง่ายมากอย่างน่าประหลาดใจ สั้น ๆ ดูเหมือนว่า:

    ครั้งแรกที่เพจถูกเรียกใช้ ASP.NET จะสร้างวัตถุสำหรับเพจและการควบคุม ถัดไป รหัสเริ่มต้นจะถูกดำเนินการ หลังจากนั้นเพจจะถูกแปลงเป็น HTML และส่งคืนไปยังไคลเอนต์ และวัตถุที่สร้างขึ้นจะถูกลบออกจากหน่วยความจำของเซิร์ฟเวอร์

    ในบางจุด ผู้ใช้ดำเนินการที่ก่อให้เกิดการตอบกลับ เช่น การคลิกปุ่ม จากนั้นหน้าจะถูกส่งไปยังเซิร์ฟเวอร์พร้อมกับข้อมูลในแบบฟอร์มทั้งหมด

    ASP.NET สกัดกั้นเพจที่ส่งคืนนี้และสร้างออบเจกต์ขึ้นใหม่อีกครั้ง โดยส่งออบเจกต์กลับคืนสู่สถานะเดิมเมื่อส่งเพจนี้ไปยังไคลเอนต์ครั้งล่าสุด

    จากนั้น ASP.NET จะตรวจสอบว่าการดำเนินการใดที่ทำให้ข้อมูลถูกโพสต์กลับ และสร้างเหตุการณ์ที่เหมาะสม (เช่น Button.Click) ซึ่งผู้พัฒนาสามารถแสดงปฏิกิริยาบางอย่างในโค้ดของเขาได้

    ตามกฎแล้ว นักพัฒนาต้องการดำเนินการบางอย่างในฝั่งเซิร์ฟเวอร์ในขั้นตอนนี้ (เช่น การอัปเดตฐานข้อมูลหรือการอ่านข้อมูลจากไฟล์) จากนั้นแก้ไขวัตถุควบคุมเพื่อให้แสดงข้อมูลใหม่

    หน้าที่แก้ไขจะถูกแปลงเป็น HTML และส่งกลับไปยังไคลเอ็นต์ วัตถุหน้าจะถูกลบออกจากหน่วยความจำ ในกรณีที่เกิด postback อื่น ASP.NET ทำซ้ำขั้นตอนที่แสดงในย่อหน้าที่ 2-4

กล่าวอีกนัยหนึ่ง ASP.NET ใช้ข้อมูลแบบฟอร์มไม่เพียงเพื่อกำหนดค่าวัตถุควบคุมบนเพจเท่านั้น แต่ยังใช้เพื่อตัดสินใจว่าเหตุการณ์ใดที่จะเริ่มทำงาน

ตัวอย่างเช่น เมื่อสังเกตเห็นว่าข้อความที่แสดงในช่องข้อความมีการเปลี่ยนแปลงตั้งแต่การย้อนกลับครั้งล่าสุด ASP.NET จะเริ่มเหตุการณ์ที่จำเป็นเพื่อแจ้งให้เพจทราบ หากต้องการตอบสนองต่อเหตุการณ์นี้หรือไม่นั้นขึ้นอยู่กับผู้พัฒนาที่จะเลือก

โปรดทราบว่าเนื่องจาก HTTP ไม่สนับสนุนแนวคิดของสถานะ และสถานะทั้งหมดที่ ASP.NET ทำให้พร้อมใช้งานนั้นถูกกู้คืน โมเดลที่ขับเคลื่อนด้วยเหตุการณ์จึงเป็นการจำลองโดยพื้นฐานแล้ว เพื่อรองรับโมเดลนี้ ASP.NET ต้องทำงานหลายอย่างใน พื้นหลัง. ความสวยงามของแนวคิดนี้คือโปรแกรมเมอร์มือใหม่ไม่จำเป็นต้องคุ้นเคยกับรายละเอียดทั้งหมดของระบบเพื่อที่จะใช้ประโยชน์จากกิจกรรมเซิร์ฟเวอร์ได้สำเร็จ

ย้อนกลับข้อมูลอัตโนมัติ

แน่นอนว่ามีช่องว่างหนึ่งจุดในระบบเหตุการณ์ที่อธิบายไว้จนถึงตอนนี้ นักพัฒนาแอปพลิเคชัน Windows คุ้นเคยกับการจัดการกับโมเดลเหตุการณ์ที่หลากหลายซึ่งอนุญาตให้โค้ดตอบสนองต่อการเคลื่อนไหวของเมาส์ การกดแป้นพิมพ์ และการโต้ตอบการควบคุมแบบทันที แต่ใน ASP.NET การดำเนินการของไคลเอ็นต์จะเกิดขึ้นที่ฝั่งไคลเอ็นต์ และการประมวลผลฝั่งเซิร์ฟเวอร์จะเกิดขึ้นบนเว็บเซิร์ฟเวอร์ ซึ่งหมายความว่าการตอบสนองต่อเหตุการณ์จะต้องเสียค่าใช้จ่ายเสมอ ดังนั้น เหตุการณ์ที่เกิดขึ้นอย่างรวดเร็ว (เช่น เหตุการณ์การเลื่อนเมาส์) จึงไม่สามารถทำได้ในโลกของ ASP.NET

เพื่อให้บรรลุใน หน้าจอผู้ใช้เอฟเฟกต์เฉพาะ คุณสามารถสร้าง JavaScript ฝั่งไคลเอ็นต์เพื่อจัดการเหตุการณ์ด่วน เช่น การเคลื่อนไหวของเมาส์ หรือดียิ่งขึ้นคุณสามารถใช้ องค์ประกอบพิเศษตัวควบคุม ASP.NET ที่มีความสามารถในตัวประเภทนี้ เช่น หนึ่งในตัวควบคุม ASP.NET AJAX อย่างไรก็ตาม รหัสตรรกะทางธุรกิจควรรันในสภาพแวดล้อมเซิร์ฟเวอร์ที่มีความปลอดภัยสูงเท่านั้น

หากคุณคุ้นเคยกับ แบบฟอร์ม HTMLแล้วคุณจะรู้ว่าวิธีหนึ่งที่ใช้กันทั่วไปในการส่งเพจคือการคลิกปุ่มส่ง ในกรณีของการใช้การควบคุมเซิร์ฟเวอร์ HTML มาตรฐานในรูปแบบเว็บ .aspx โดยทั่วไปวิธีนี้เป็นทางเลือกเดียวที่เป็นไปได้ อย่างไรก็ตาม หลังจากที่เพจถูกโพสต์กลับ ASP.NET สามารถเริ่มเหตุการณ์อื่นๆ ได้ทันที (ตัวอย่างเช่น เหตุการณ์ที่แจ้งว่าค่าในตัวควบคุมอินพุตมีการเปลี่ยนแปลง)

แน่นอนว่าไม่เพียงพอที่จะสร้างเว็บฟอร์มที่ทำงานได้อย่างสมบูรณ์ โชคดีที่การควบคุมเว็บที่มีให้ใน ASP.NET ขยายโมเดลนี้ด้วยการย้อนกลับอัตโนมัติ ด้วยสิ่งอำนวยความสะดวกนี้ การควบคุมอินพุตสามารถสร้างเหตุการณ์ต่างๆ ที่รหัสเซิร์ฟเวอร์ของคุณสามารถตอบสนองได้ทันที

ตัวอย่างเช่น คุณสามารถทริกเกอร์ postback เมื่อผู้ใช้คลิกช่องทำเครื่องหมาย เปลี่ยนการเลือกในรายการ หรือเปลี่ยนข้อความในช่องข้อความแล้วนำทางไปยังช่องอื่น เหตุการณ์เหล่านี้ไม่ได้เป็นแบบโมดูลาร์เหมือนกับเหตุการณ์ในแอปพลิเคชัน Windows แต่เป็นการปรับปรุงที่สำคัญเหนือปุ่มส่ง

postback อัตโนมัติคืออะไร

หากต้องการใช้ postback อัตโนมัติ คุณต้องติดตั้ง คุณสมบัติ AutoPostBackการควบคุมเว็บเป็นจริง (โดยค่าเริ่มต้น คุณสมบัตินี้ถูกตั้งค่าเป็นเท็จ ซึ่งทำให้มั่นใจได้ถึงประสิทธิภาพสูงสุดในกรณีที่คุณไม่จำเป็นต้องตอบสนองต่อเหตุการณ์การเปลี่ยนแปลงใดๆ) จากนั้น ASP.NET จะใช้ฝั่งไคลเอนต์ JavaScript เพื่อเชื่อมช่องว่างระหว่างรหัสไคลเอนต์และเซิร์ฟเวอร์

โดยเฉพาะอย่างยิ่ง สิ่งต่อไปนี้จะเกิดขึ้น: เมื่อเว็บเพจถูกสร้างขึ้นด้วยการควบคุมเว็บอย่างน้อยหนึ่งรายการที่มีการกำหนดค่า AutoPostBack ASP.NET จะเพิ่มฟังก์ชัน JavaScript ให้กับเพจ HTML ที่แสดงผลชื่อ ____doPostBack(). เมื่อเรียกใช้ ฟังก์ชันนี้จะเริ่มต้น postback โดยส่งเพจกลับไปยังเว็บเซิร์ฟเวอร์พร้อมข้อมูลในแบบฟอร์มทั้งหมด

นอกจากนี้ ASP.NET ยังเพิ่มฟิลด์อินพุตที่ซ่อนอยู่สองฟิลด์ที่ฟังก์ชัน ____doPostBack() ใช้เพื่อส่งข้อมูลบางอย่างกลับไปยังเซิร์ฟเวอร์ ข้อมูลนี้เป็น ID ของตัวควบคุมที่เริ่มเหตุการณ์และข้อมูลที่เกี่ยวข้องอื่นๆ ในขั้นต้น ข้อมูลในฟิลด์จะว่างเปล่า ดังที่แสดงด้านล่าง:

ฟังก์ชัน ____doPostBack() มีหน้าที่รับผิดชอบในการตั้งค่าเหล่านี้ให้เป็นข้อมูลเหตุการณ์ที่เหมาะสม จากนั้นส่งแบบฟอร์ม ด้านล่างนี้เป็นตัวอย่างของฟังก์ชัน ____doPostBack()

ฟังก์ชัน __doPostBack(eventTarget, eventArgument) ( if (!theForm.onsubmit || (theForm.onsubmit() != false)) ( theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); ) )

อย่าลืมว่า ASP.NET สร้างฟังก์ชัน __doPostBack() โดยอัตโนมัติ โค้ดนี้ขยายเมื่อมีการเพิ่มตัวควบคุม AutoPostBack ลงในหน้า เนื่องจากต้องตั้งค่าข้อมูลเหตุการณ์สำหรับแต่ละตัวควบคุม

สุดท้าย การควบคุมใดๆ ก็ตามที่มีการตั้งค่าคุณสมบัติ AutoPostBack เป็น true จะถูกเชื่อมต่อกับฟังก์ชัน __doPostBack() โดยใช้แอตทริบิวต์ onclick หรือ onchange แอตทริบิวต์เหล่านี้บ่งชี้ว่าเบราว์เซอร์ควรดำเนินการอย่างไรเพื่อตอบสนองต่อเหตุการณ์ไคลเอ็นต์ onclick และ onchange JavaScript

กล่าวอีกนัยหนึ่ง ASP.NET จะแปลงเหตุการณ์ไคลเอนต์ JavaScript เป็นเหตุการณ์เซิร์ฟเวอร์ ASP.NET โดยอัตโนมัติโดยใช้ฟังก์ชัน __doPostBack() เป็นพร็อกซี แน่นอนว่านักพัฒนาแอปพลิเคชัน ASP ที่มีประสบการณ์สามารถสร้างด้วยตนเองได้ วิธีการแก้ปัญหาที่คล้ายกันสำหรับหน้าเว็บในรูปแบบ ASP ดั้งเดิม แต่ ASP.NET ทำให้ชีวิตง่ายขึ้นมากสำหรับนักพัฒนาโดยการจัดการรายละเอียดทั้งหมดเหล่านี้โดยอัตโนมัติ

ดูสถานะ

องค์ประกอบสุดท้ายในรูปแบบ ASP.NET คือ ดูกลไกของรัฐ. กลไกนี้ช่วยแก้ปัญหาอื่นที่เกิดขึ้นจากการที่ HTTP ไม่รองรับสถานะ - การสูญเสียข้อมูลเกี่ยวกับการเปลี่ยนแปลง

ทุกครั้งที่เพจถูกส่งกลับไปยังเซิร์ฟเวอร์ ASP.NET จะรับข้อมูลทั้งหมดที่ผู้ใช้ป้อนในข้อมูลใด ๆ ที่อยู่ในหมายเลขอ้างอิง การควบคุม . จากนั้น ASP.NET จะโหลดหน้าเว็บในสถานะดั้งเดิม (ตามโครงร่างโครงร่างและการตั้งค่าเริ่มต้นที่ระบุในไฟล์ .aspx) และปรับแต่งตามข้อมูลใหม่นี้

ปัญหาคือในเว็บฟอร์มแบบไดนามิก โค้ดสามารถเปลี่ยนรายละเอียดอื่นๆ ได้อีกมากมาย ตัวอย่างเช่น สามารถเปลี่ยนสีชื่อเรื่องโดยทางโปรแกรม แก้ไขข้อความคงที่ ซ่อนหรือแสดงแผงที่มีตัวควบคุม หรือแม้แต่จัดตารางข้อมูลทั้งหมดลงในตาราง การดำเนินการทั้งหมดนี้เกี่ยวข้องกับการเปลี่ยนสถานะเริ่มต้นของเพจ อย่างไรก็ตาม สิ่งเหล่านี้จะไม่ปรากฏในข้อมูลแบบฟอร์มที่ส่งมา และนั่นหมายความว่าหลังจากการย้อนกลับของข้อมูลแต่ละครั้ง ข้อมูลนี้จะสูญหายไป

โดยปกติแล้ว การขาดการสนับสนุนจากรัฐจะแก้ไขได้โดยใช้คุกกี้อย่างง่าย คุกกี้เซสชัน และวิธีแก้ปัญหาอื่นๆ อย่างไรก็ตาม กลไกดังกล่าวทั้งหมดต้องใช้มาตรการในการพัฒนาตนเอง (ซึ่งบางครั้งต้องใช้ความพยายามอย่างมาก)

เพื่อแก้ไขข้อ จำกัด นี้ ASP.NET มีกลไกการทำให้เป็นอนุกรมสถานะในตัวของมันเอง โดยพื้นฐานแล้ว กลไกนี้ทำงานในลักษณะนี้: หลังจากรันโค้ดของเพจเสร็จสิ้น (และก่อนที่เอกสาร HTML สุดท้ายจะถูกสร้างขึ้นและส่งไปยังไคลเอ็นต์) ASP.NET จะตรวจสอบคุณสมบัติของตัวควบคุมทั้งหมดที่แสดงในเพจนี้ หากคุณสมบัติเหล่านี้มีการเปลี่ยนแปลงจากสถานะเดิม ASP.NET จะสร้างบันทึกย่อที่สอดคล้องกันในคอลเลกชันชื่อ-ค่า จากนั้น ASP.NET จะนำข้อมูลที่รวบรวมทั้งหมดมาจัดลำดับเป็นสตริงรูปแบบ Base64 (ซึ่งรับประกันว่าไม่มีอักขระพิเศษที่ผิดกฎหมายใน HTML) จากนั้นจึงแทรกสตริงนี้ลงในส่วน หน้าเป็นฟิลด์ใหม่ที่ซ่อนอยู่

ครั้งต่อไปที่โพสต์หน้านี้ ASP.NET จะทำสิ่งต่อไปนี้:

    สร้างวัตถุหน้าและการควบคุมขึ้นใหม่ตามค่าเริ่มต้น (ระบุในไฟล์ .aspx) ปล่อยให้หน้าอยู่ในสถานะเดิมเมื่อได้รับการร้องขอครั้งแรก

    ยกเลิกการซีเรียลข้อมูลสถานะและอัปเดตการควบคุมทั้งหมด ส่งผลให้เพจกลับสู่สถานะเดิมก่อนที่จะส่งไปยังไคลเอนต์ครั้งล่าสุด

    สุดท้าย เพจได้รับการกำหนดค่าตามข้อมูลในแบบฟอร์มที่ส่งมา ตัวอย่างเช่น ถ้าผู้ใช้ป้อนข้อความใหม่ในกล่องข้อความหรือทำการเลือกใหม่ในกล่องรายการ ข้อมูลนั้นจะถูกวางในคอลเลกชันฟอร์มและใช้โดย ASP.NET เพื่อสร้างตัวควบคุมที่เหมาะสม จากนั้นเพจจะแสดงสถานะปัจจุบันเมื่อผู้ใช้ดู

    ตอนนี้รหัสการจัดการเหตุการณ์ของคุณเริ่มเล่นแล้ว ASP.NET สร้างเหตุการณ์ที่เหมาะสม และรหัสสามารถตอบสนองโดยการเปลี่ยนหน้า นำทางไปยัง หน้าใหม่หรือโดยการดำเนินการอื่น ๆ

การใช้สถานะการดูเป็นโซลูชันที่ยอดเยี่ยมเนื่องจากทรัพยากรของเซิร์ฟเวอร์สามารถปลดปล่อยได้หลังจากแต่ละคำขอ ทำให้สามารถปรับขนาดได้ถึงคำขอหลายร้อยหรือหลายพันรายการโดยไม่ทำให้เซิร์ฟเวอร์ทำงานช้าลง อย่างไรก็ตาม คุณต้องจ่ายทุกอย่าง การจัดเก็บสถานะการดูภายในหน้าจะเพิ่มขนาดของหน้า สิ่งนี้มีผลสองเท่าต่อไคลเอนต์ เนื่องจากไม่เพียงต้องการเพจที่ใหญ่ขึ้นเท่านั้น แต่ยังต้องส่งคืนข้อมูลสถานะการดูที่ซ่อนอยู่ไปยังเซิร์ฟเวอร์ในการโพสต์แบ็คครั้งถัดไปด้วย ดังนั้นการรับ-ส่งเพจจึงใช้เวลานาน

สำหรับหน้าธรรมดา โอเวอร์เฮดนี้มีขนาดเล็ก แต่เมื่อตั้งค่าการควบคุมข้อมูลจำนวนมากที่ซับซ้อน เช่น GridView จำนวนข้อมูลสถานะการดูจะเพิ่มขึ้นอย่างมาก ในกรณีเช่นนี้ คุณสามารถปิดใช้งานสถานะมุมมองสำหรับตัวควบคุมได้โดยตั้งค่าเป็น คุณสมบัติ EnableViewStateเป็นเท็จ แต่ในกรณีนั้น คุณจะต้องเริ่มต้นการควบคุมใหม่ในทุกรายการส่งคืน

แม้ว่า EnableViewState จะถูกตั้งค่าเป็น False ตัวควบคุมยังคงสามารถเก็บข้อมูลสถานะการดูจำนวนเล็กน้อยที่มีความสำคัญต่อการทำงานที่เหมาะสมได้ ข้อมูลสถานะมุมมองสิทธิพิเศษนี้เรียกว่า สถานะการควบคุมและคุณไม่สามารถปิดได้ อย่างไรก็ตาม ในการควบคุมที่ออกแบบมาอย่างดี จำนวนข้อมูลสถานะการควบคุมจะน้อยกว่าขนาดของสถานะมุมมองทั้งหมด

ASP.NET ใช้สถานะมุมมองกับคุณสมบัติเพจและการควบคุมเท่านั้น ASP.NET ไม่ทำเช่นเดียวกันกับตัวแปรอินสแตนซ์และข้อมูลอื่นๆ ที่คุณอาจใช้ อย่างไรก็ตาม คุณสามารถใส่ข้อมูลประเภทอื่นลงในสถานะการดูและเรียกข้อมูลนั้นด้วยตนเองในภายหลัง

รูปต่อไปนี้แสดงกลไกการร้องขอเพจแบบพาสทรูที่รวมแนวคิดเหล่านี้ทั้งหมด:

ดูการวิเคราะห์สถานะ

หากคุณดู HTML ที่สร้างขึ้นสำหรับหน้า ASP.NET คุณจะพบฟิลด์อินพุตที่ซ่อนอยู่พร้อมข้อมูลสถานะการดู:

แถบสถานะของมุมมองไม่สามารถอ่านได้โดยมนุษย์: มันดูเหมือนลำดับของอักขระแบบสุ่ม อย่างไรก็ตาม สิ่งสำคัญคือต้องทราบว่าหากต้องการ ผู้ใช้สามารถใช้ความพยายามเล็กน้อยและถอดรหัสได้อย่างง่ายดาย ต่อไปนี้เป็นข้อมูลโค้ด .NET ที่ทำสิ่งนี้และแสดงข้อมูลที่ถอดรหัสบนหน้าเว็บ:

// viewStateString มีข้อมูลสถานะการดู สตริง viewStateString = คำขอ["__VIEWSTATE"]; // แปลงสตริง Base64 เป็นอาร์เรย์ปกติของไบต์ // แทนอักขระ ASCII ไบต์ ไบต์ = Convert.FromBase64String(viewStateString); // Deserialize และแสดงสตริง Label1.Text = System.Text.Encoding.ASCII.GetString(bytes);

เมื่อถอดรหัสแล้ว สเตตัสไลน์จะมีลักษณะดังนี้:

915261182d__ControlsRequirePostBackKey__CSVB[?S???&?7 ???

สถานะการดูไม่ใช่ตำแหน่งที่ดีในการจัดเก็บข้อมูลสำคัญที่ไคลเอนต์ไม่ต้องการเห็น ดังนั้นข้อมูลประเภทนี้ควรถูกทิ้งไว้บนเซิร์ฟเวอร์ นอกจากนี้ คุณยังควรหลีกเลี่ยงการตัดสินใจตามสถานะการดูที่อาจทำให้แอปพลิเคชันเสียหาย หากไคลเอ็นต์ทำการเปลี่ยนแปลงข้อมูลสถานะการดูโดยเจตนาหรือโดยไม่ได้ตั้งใจ

โชคดีที่สามารถเพิ่มความปลอดภัยของข้อมูลสถานะการดูได้ คุณสามารถเปิดใช้งานการแฮชอัตโนมัติเพื่อป้องกันการพยายามเปลี่ยนสถานะของมุมมอง หรือคุณสามารถเข้ารหัสสถานะของมุมมองเพื่อป้องกันไม่ให้ถูกถอดรหัสได้ เทคนิคเหล่านี้เปลี่ยนฟิลด์ที่ซ่อนอยู่จากวิธีแก้ไขปัญหาที่หยาบกระด้างให้เป็นโครงสร้างพื้นฐานที่เชื่อถือได้และน่าเชื่อถือมากขึ้น

แยกสถานะการดู

ขนาดของฟิลด์สถานะมุมมองที่ซ่อนอยู่ไม่มีขีดจำกัด อย่างไรก็ตาม พร็อกซี ไฟร์วอลล์ และเบราว์เซอร์มือถือบางตัวจะไม่อนุญาตให้ผ่านหน้าต่างๆ หากช่องที่ซ่อนไว้มีขนาดใหญ่กว่าค่าที่กำหนด เพื่อแก้ปัญหานี้ คุณสามารถใช้การแยกสถานะการดู ซึ่งจะแบ่งสถานะการดูออกเป็นหลายฟิลด์โดยอัตโนมัติ เพื่อให้ขนาดของฟิลด์ที่ซ่อนอยู่ไม่เกินขีดจำกัดที่ระบุ

สำหรับสิ่งนี้คุณต้องติดตั้ง แอตทริบิวต์ maxPageStateFieldLengthองค์ประกอบ ในไฟล์ web.config สิ่งนี้เป็นตัวกำหนด ขนาดสูงสุดดูสถานะเป็นไบต์ ต่อไปนี้คือตัวอย่าง การกำหนดขนาดสถานะการดูเป็น 1 KB:

โปรดทราบว่าการแยกสถานะการดูเป็นเพียงกลไกในการลดปัญหากับพร็อกซีบางตัว (ซึ่งเป็นเหตุการณ์ที่เกิดขึ้นค่อนข้างน้อย) การแยกสถานะการดูไม่ได้ปรับปรุงประสิทธิภาพการทำงาน เพื่อปรับปรุงประสิทธิภาพ คุณควรพยายามรวมข้อมูลให้น้อยที่สุดเท่าที่จะเป็นไปได้ในสถานะข้อมูลพร็อพเพอร์ตี้

แอตทริบิวต์ UseSubmitBehavior ระบุว่าปุ่มควบคุมใช้คุณลักษณะการคอมมิตในตัวของเบราว์เซอร์ไคลเอ็นต์ หรือใช้กลไกการแจ้งเตือนธุรกรรม ASP.NET

ถ้าตัวควบคุมใช้เบราว์เซอร์เพื่อส่งฟังก์ชัน คุณสมบัตินั้นจะถูกตั้งค่าเป็น TRUE มิฉะนั้น FALSE ค่าเริ่มต้นคือ TRUE

ถ้า UseSubmitBehavior ถูกตั้งค่าเป็น FALSE ASP.NET จะเพิ่มสคริปต์ฝั่งไคลเอ็นต์เพื่อส่งแบบฟอร์ม ปัจจุบัน นักพัฒนาการควบคุมสามารถใช้เมธอด GetPostBackEventReference ของปุ่มเพื่อส่งคืนเหตุการณ์ postback ของไคลเอ็นต์ เมธอด GetPostBackEventReference ส่งคืนสตริงที่มีข้อความเรียกฟังก์ชันไคลเอ็นต์ที่สามารถวางลงในตัวจัดการเหตุการณ์ฝั่งไคลเอ็นต์

ไวยากรณ์

/>

ตัวอย่าง

ตัวอย่าง

ตัวอย่างต่อไปนี้ใช้กลไก postback ASP.NET:


คลิกปุ่ม:
Text="ส่ง" onclick="SubmitBtn"
UseSubmitBehavior="FALSE" />


อัพเดทล่าสุด: 31.10.2015

แม้ว่าเราจะสามารถเขียนตัวช่วยที่จำเป็นด้วยตนเองได้ แต่เฟรมเวิร์ก MVC ได้จัดเตรียมตัวช่วย html ในตัวชุดใหญ่ไว้แล้ว ซึ่งช่วยให้เราสร้างมาร์กอัปนี้หรือมาร์กอัปนั้น โดยหลักแล้วสำหรับการทำงานกับฟอร์ม ดังนั้น ในกรณีส่วนใหญ่ คุณจะไม่ต้องสร้างตัวช่วยของคุณเอง และคุณสามารถใช้ตัวช่วยที่มีอยู่แล้วภายในได้

ตัวช่วย Html.BeginForm

เราสามารถใช้องค์ประกอบ html มาตรฐานเพื่อสร้างแบบฟอร์มได้ เช่น

ใส่ชื่อของคุณ

ป้อนที่อยู่:

นี่เป็นรูปแบบ html อย่างง่ายที่จะส่งข้อมูลที่ป้อนทั้งหมดเมื่อคลิกปุ่ม คำขอโพสต์ไปที่ /หน้าแรก/ซื้อ. ตัวช่วย BeginForm/EndForm ในตัวช่วยให้คุณสร้างฟอร์มเดียวกันได้:

ใส่ชื่อของคุณ

ป้อนที่อยู่:

}

เมธอด BeginForm ใช้เป็นพารามิเตอร์ ชื่อของเมธอดการดำเนินการ และชื่อของคอนโทรลเลอร์ ตลอดจนประเภทคำขอ ตัวช่วยนี้สร้างเป็นแท็กเริ่มต้น

และแท็กปิด
. ดังนั้นเมื่อแสดงมุมมองไปยังเอาต์พุตสตรีม เราจะได้โค้ด html เดียวกันกับแท็กฟอร์ม ดังนั้นทั้งสองวิธีจึงเหมือนกัน

มีจุดหนึ่งที่นี่ หากเรามีเมธอดเดียวกันสองเวอร์ชันที่กำหนดไว้ในคอนโทรลเลอร์ - สำหรับเมธอด POST และ GET เช่น:

Public ActionResult Buy() ( return View(); ) public string Buy(ซื้อ ซื้อ) ( .............. return "ขอบคุณที่ซื้อหนังสือ";; )

นั่นคือในความเป็นจริงแล้ว การเรียกเพจด้วยแบบฟอร์มและการส่งแบบฟอร์มนั้นดำเนินการโดยการซื้อแบบเดียวกัน ในกรณีนี้ เป็นไปไม่ได้ที่จะไม่ระบุพารามิเตอร์ในตัวช่วย Html.BeginForm:

@using(Html.BeginForm()) ( ............. )

การป้อนข้อมูล

ตัวอย่างก่อนหน้านี้ใช้องค์ประกอบ html มาตรฐานพร้อมกับตัวช่วย Html.BeginForm อย่างไรก็ตาม ชุดตัวช่วย html ยังมีตัวช่วยสำหรับการป้อนข้อมูลของผู้ใช้ MVC กำหนดตัวช่วยอินพุตที่หลากหลายสำหรับเกือบทุกองค์ประกอบ html สิ่งที่ต้องเลือก - ตัวช่วยหรือองค์ประกอบอินพุต html มาตรฐาน ผู้พัฒนาเป็นผู้ตัดสินใจเอง

โดยไม่คำนึงถึงประเภท ตัวช่วย html พื้นฐานทั้งหมดใช้พารามิเตอร์อย่างน้อยสองตัว: พารามิเตอร์แรกใช้เพื่อตั้งค่าสำหรับแอตทริบิวต์ id และชื่อ และพารามิเตอร์ที่สองใช้เพื่อตั้งค่าของแอตทริบิวต์ค่า

Html.TextBox

ตัวช่วย Html.TextBox สร้างแท็กอินพุตที่มีค่าแอตทริบิวต์ประเภท text ตัวช่วย TextBox ใช้ในการรับอินพุตของผู้ใช้ ลองเขียนแบบฟอร์มก่อนหน้าใหม่โดยแทนที่ช่องป้อนข้อมูลด้วยตัวช่วย Html.TextBox:

@using(Html.BeginForm("ซื้อ", "หน้าแรก", FormMethod.Post)) (

ใส่ชื่อของคุณ:

@Html.TextBox("บุคคล", "ป้อนชื่อ")

ป้อนที่อยู่:

@Html.TextBox("ที่อยู่", "ป้อนที่อยู่")

}

เราจะได้ผลลัพธ์เดียวกัน:

Html.TextArea

ตัวช่วย TextArea ใช้เพื่อสร้างองค์ประกอบ

โปรดทราบว่าตัวช่วยถอดรหัสค่าที่อยู่ในนั้น รวมถึงแท็ก html (ตัวช่วยทั้งหมดถอดรหัสค่าโมเดลและค่าแอตทริบิวต์) ตัวช่วย TextArea เวอร์ชันอื่นๆ ช่วยให้คุณระบุจำนวนแถวและคอลัมน์ที่กำหนดขนาดของช่องข้อความได้

@Html.TextArea("ข้อความ", "สวัสดี
โลก", 5, 50, null)

ตัวช่วยนี้จะสร้างมาร์กอัปต่อไปนี้:

Html. ซ่อน

ในตัวอย่างแบบฟอร์ม เราใช้ช่องใส่ข้อมูลที่ซ่อนอยู่ type="hidden" แทนที่จะใช้ตัวช่วย Html.Hidden ดังนั้นผู้ช่วยเหลือดังต่อไปนี้:

@Html.Hidden("รหัสหนังสือ", "2")

สร้างมาร์กอัป:

และเมื่อส่งตัวแปรจาก ViewBag เราต้องแปลงเป็นประเภทสตริง: @Html.Hidden("BookId", @ViewBag.BookId as string)

Html.รหัสผ่าน

Html.Password สร้างฟิลด์สำหรับป้อนรหัสผ่าน คล้ายกับตัวช่วยกล่องข้อความ แต่แสดงมาสก์รหัสผ่านแทนอักขระที่ป้อน รหัสถัดไป:

@Html.Password("รหัสผ่านผู้ใช้", "val")

สร้างมาร์กอัป:

Html.RadioButton

ตัวช่วย Html.RadioButton ใช้เพื่อสร้างปุ่มตัวเลือก มันสร้างองค์ประกอบอินพุตที่มีค่า type="radio" หากต้องการสร้างกลุ่มของปุ่มตัวเลือก คุณต้องกำหนดชื่อเดียวกันให้กับปุ่มทั้งหมด (คุณสมบัติของชื่อ):

@Html.RadioButton("สี", "แดง") สีแดง
@Html.RadioButton("สี", "สีน้ำเงิน") สีน้ำเงิน
@ Html.RadioButton("สี", "เขียว" จริง) สีเขียว

รหัสนี้สร้างมาร์กอัปต่อไปนี้:

สีแดง
สีฟ้า
สีเขียว

Html.CheckBox

สามารถใช้ Html.CheckBox เพื่อสร้างสององค์ประกอบพร้อมกันได้ ยกตัวอย่างเช่น รหัสต่อไปนี้:

@Html.CheckBox("เปิดใช้งาน", เท็จ)

นิพจน์นี้จะสร้าง HTML ต่อไปนี้:

นั่นคือนอกเหนือจากช่องทำเครื่องหมายแล้วยังมีการสร้างฟิลด์ที่ซ่อนอยู่ด้วย ทำไมถึงจำเป็น? ประเด็นคือเบราว์เซอร์จะส่งค่าของช่องทำเครื่องหมายเมื่อมีการเลือกหรือทำเครื่องหมายในช่องเท่านั้น และฟิลด์ที่ซ่อนอยู่ทำให้มั่นใจได้ว่าองค์ประกอบเปิดใช้งานถูกตั้งค่าเป็นค่า แม้ว่าผู้ใช้จะไม่ได้ทำเครื่องหมายในช่องก็ตาม

Html.Label

ตัวช่วย Html.Label สร้างองค์ประกอบ

องค์ประกอบป้ายกำกับแสดงป้ายกำกับอย่างง่ายสำหรับการแนบข้อมูลกับองค์ประกอบอินพุต เช่น ช่องข้อความ สำหรับแอตทริบิวต์ขององค์ประกอบป้ายกำกับต้องมี ID ขององค์ประกอบอินพุตที่เกี่ยวข้อง เมื่อผู้ใช้คลิกที่ป้ายกำกับ เบราว์เซอร์จะโอนโฟกัสไปยังองค์ประกอบอินพุตที่เกี่ยวข้องกับป้ายกำกับนั้นโดยอัตโนมัติ

Html.DropDownList

ตัวช่วย Html.DropDownList สร้างรายการแบบเลื่อนลง เช่น องค์ประกอบ

ตอนนี้จบลงแล้ว ตัวอย่างที่ซับซ้อน. มาดูรายการคอลเลกชันขององค์ประกอบหนังสือกัน ในคอนโทรลเลอร์ เราจะส่งรายการนี้ผ่าน ViewBag:

BookContext db = BookContext ใหม่ (); ดัชนี ActionResult สาธารณะ () ( หนังสือ SelectList = ใหม่ SelectList (db.Books, "ผู้แต่ง", "ชื่อ"); ViewBag.Books = หนังสือ; กลับ View (); )

ที่นี่เราสร้างวัตถุ SelectList โดยส่งตัวสร้างชุดของค่าสำหรับรายการ (db.Books) ชื่อของคุณสมบัติรูปแบบหนังสือที่จะใช้เป็นค่า (ผู้เขียน) และชื่อของคุณสมบัติรูปแบบหนังสือ เพื่อใช้แสดงในรายการ ในกรณีนี้ ไม่จำเป็นต้องตั้งค่าสองคุณสมบัติที่แตกต่างกัน คุณสามารถตั้งค่าหนึ่งสำหรับทั้งค่าและการแสดงผล

จากนั้นในมุมมองเราสามารถใช้ SelectList แบบนี้:

@Html.DropDownList("ผู้เขียน", ViewBag.Books เป็น SelectList)

และเมื่อแสดงผลมุมมองแล้ว รายการ SelectList ทั้งหมดจะถูกเพิ่มลงในรายการดรอปดาวน์

Html.ListBox

ตัวช่วย Html.ListBox เช่น DropDownList สร้างองค์ประกอบ

ด้วยการถ่ายโอนค่าเดียวไปยังเซิร์ฟเวอร์ทุกอย่างชัดเจน แต่จะโอนค่าหลายค่าได้อย่างไร สมมติว่าเรามีแบบฟอร์มต่อไปนี้:

@using (Html.BeginForm()) ( @Html.ListBox("ประเทศ", new MultiSelectList(สตริงใหม่ ( "รัสเซีย", "สหรัฐอเมริกา", "จีน", "อินเดีย" )))

}

จากนั้นวิธีการควบคุมสามารถรับค่าเหล่านี้ได้ดังนี้:

ดัชนีสตริงสาธารณะ(ประเทศสตริง) ( ผลลัพธ์ของสตริง = ""; foreach (สตริง c ในประเทศ) ( ผลลัพธ์ += c; ผลลัพธ์ += ";"; ) ส่งคืน "คุณได้เลือก: " + ผลลัพธ์; )

รูปแบบที่มีหลายปุ่ม

โดยทั่วไป จะมีปุ่มส่งเพียงปุ่มเดียวในแบบฟอร์ม อย่างไรก็ตาม ในบางสถานการณ์อาจจำเป็นต้องใช้ปุ่มมากกว่าหนึ่งปุ่ม ตัวอย่างเช่น มีฟิลด์สำหรับป้อนค่า และปุ่มสองปุ่มระบุว่าควรลบค่านี้หรือในทางกลับกัน เพิ่ม:

@ใช้ (Html.BeginForm("MyAction", "Home", FormMethod.Post)) (
}

วิธีแก้ปัญหาที่ง่ายที่สุดคือตั้งค่าแอตทริบิวต์ของชื่อเป็นค่าเดียวกันสำหรับแต่ละปุ่ม แต่ตั้งค่าแอตทริบิวต์ของค่าเป็นค่าอื่น และวิธีการที่ใช้แบบฟอร์มอาจมีลักษณะดังนี้:

Public ActionResult MyAction(ผลิตภัณฑ์สตริง, การดำเนินการสตริง) ( if(action=="add") ( ) else if(action=="delete") ( ) // โค้ดเมธอดที่เหลือ )

และด้วยความช่วยเหลือของการสร้างเงื่อนไขขึ้นอยู่กับค่าของพารามิเตอร์การกระทำซึ่งเก็บค่าของแอตทริบิวต์มูลค่าของปุ่มกด การดำเนินการบางอย่างจะดำเนินการ



กำลังโหลด...
สูงสุด