ตระกูล รูปร่างดึงค่าขององค์ประกอบแบบฟอร์มที่ส่งในเนื้อหาของคำขอ 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
ตัวอย่าง
พิจารณาแบบฟอร์มต่อไปนี้:
รูปภาพแสดงหน้าตาที่เรียบง่ายนี้ในหน้าต่างเว็บเบราว์เซอร์:
เมื่อผู้ใช้คลิกปุ่มส่งเบราว์เซอร์จะดึงค่าปัจจุบันของแต่ละตัวควบคุมและสร้างสตริงยาวจากค่าเหล่านั้น สตริงนี้จะถูกส่งไปยังเพจที่ระบุในแฮนเดิล
อัพเดทล่าสุด: 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 ต่อไปนี้:
โปรดทราบว่าตัวช่วยถอดรหัสค่าที่อยู่ในนั้น รวมถึงแท็ก 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 สร้างองค์ประกอบ และพารามิเตอร์ที่ส่งไปยังตัวช่วยจะกำหนดค่าของแอตทริบิวต์ for และข้อความในองค์ประกอบในเวลาเดียวกัน ตัวช่วยเวอร์ชันโอเวอร์โหลดทำให้คุณสามารถกำหนดค่าของแอตทริบิวต์ for และข้อความบนป้ายกำกับโดยอิสระจากกัน ตัวอย่างเช่น การประกาศตัวช่วย Html.Label("Name") จะสร้างมาร์กอัปต่อไปนี้:
องค์ประกอบป้ายกำกับแสดงป้ายกำกับอย่างง่ายสำหรับการแนบข้อมูลกับองค์ประกอบอินพุต เช่น ช่องข้อความ สำหรับแอตทริบิวต์ขององค์ประกอบป้ายกำกับต้องมี ID ขององค์ประกอบอินพุตที่เกี่ยวข้อง เมื่อผู้ใช้คลิกที่ป้ายกำกับ เบราว์เซอร์จะโอนโฟกัสไปยังองค์ประกอบอินพุตที่เกี่ยวข้องกับป้ายกำกับนั้นโดยอัตโนมัติ
Html.DropDownList
ตัวช่วย Html.DropDownList สร้างรายการแบบเลื่อนลง เช่น องค์ประกอบ . หากต้องการสร้างรายการดังกล่าว คุณต้องมีคอลเล็กชันของออบเจกต์ SelectListItem ที่แสดงถึงรายการ อ็อบเจ็กต์ SelectListItem มีคุณสมบัติ Text (ข้อความที่จะแสดง), Value (ตัวค่าเอง ซึ่งอาจไม่เหมือนกับข้อความ) และ Selected คุณสามารถสร้างคอลเลกชันของวัตถุ SelectListItem หรือใช้ตัวช่วย SelectList ตัวช่วยนี้ดูที่วัตถุ IEnumerable และแปลงเป็นลำดับของวัตถุ SelectListItem ตัวอย่างเช่น @Html.DropDownList("countires", new SelectList(new string ("Russia","USA", "Canada","France")),"Countries") สร้างมาร์กอัปต่อไปนี้:
ตอนนี้จบลงแล้ว ตัวอย่างที่ซับซ้อน. มาดูรายการคอลเลกชันขององค์ประกอบหนังสือกัน ในคอนโทรลเลอร์ เราจะส่งรายการนี้ผ่าน 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 สร้างองค์ประกอบ แต่อนุญาตให้เลือกองค์ประกอบได้หลายรายการ (นั่นคือ แอตทริบิวต์หลายรายการถูกตั้งค่าเป็นหลายรายการ) หากต้องการสร้างรายการที่รองรับการเลือกหลายรายการ แทนที่จะเป็น SelectList คุณสามารถใช้คลาส MultiSelectList ได้:
@Html.ListBox("ประเทศ", MultiSelectList ใหม่ (สตริงใหม่ ("รัสเซีย","สหรัฐอเมริกา", "จีน","อินเดีย")))
รหัสนี้สร้างมาร์กอัปต่อไปนี้:
ด้วยการถ่ายโอนค่าเดียวไปยังเซิร์ฟเวอร์ทุกอย่างชัดเจน แต่จะโอนค่าหลายค่าได้อย่างไร สมมติว่าเรามีแบบฟอร์มต่อไปนี้:
@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") ( ) // โค้ดเมธอดที่เหลือ )
และด้วยความช่วยเหลือของการสร้างเงื่อนไขขึ้นอยู่กับค่าของพารามิเตอร์การกระทำซึ่งเก็บค่าของแอตทริบิวต์มูลค่าของปุ่มกด การดำเนินการบางอย่างจะดำเนินการ