ข้อควรระวัง: คำถามนี้มีอายุเกินเก้าปี!
ตัวเลือกที่ดีที่สุดของคุณคือค้นหาคำถามที่ใหม่กว่าหรือค้นหาคำตอบด้านล่างเพื่อค้นหา MVC รุ่นที่คุณต้องการเนื่องจากคำตอบมากมายที่นี่ล้าสมัยแล้ว
หากคุณพบคำตอบที่เหมาะกับเวอร์ชันของคุณโปรดตรวจสอบให้แน่ใจว่าคำตอบนั้นมีเวอร์ชั่นของ MVC ที่คุณใช้อยู่
(คำถามเดิมเริ่มด้านล่าง)
นี่ดูเหมือนจะแปลกสำหรับฉัน แต่เท่าที่ฉันสามารถบอกได้นี่เป็นวิธีที่คุณทำ
ฉันมีชุดของวัตถุและฉันต้องการให้ผู้ใช้เลือกอย่างน้อยหนึ่งรายการ สิ่งนี้บอกฉันว่า "แบบฟอร์มพร้อมช่องทำเครื่องหมาย" วัตถุของฉันไม่มีแนวคิดของ "เลือก" (พวกเขาเป็นพื้นฐานของ POCO ที่เกิดขึ้นจากการยกเลิกการโทร wcf) ดังนั้นฉันทำต่อไปนี้:
public class SampleObject{
public Guid Id {get;set;}
public string Name {get;set;}
}
ในมุมมอง:
<%
using (Html.BeginForm())
{
%>
<%foreach (var o in ViewData.Model) {%>
<%=Html.CheckBox(o.Id)%> <%= o.Name %>
<%}%>
<input type="submit" value="Submit" />
<%}%>
และในคอนโทรลเลอร์นี่เป็นวิธีเดียวที่ฉันจะเห็นว่าผู้ใช้ตรวจสอบวัตถุใด:
public ActionResult ThisLooksWeird(FormCollection result)
{
var winnars = from x in result.AllKeys
where result[x] != "false"
select x;
// yadda
}
มันประหลาดในตอนแรกและประการที่สองสำหรับรายการเหล่านั้นที่ผู้ใช้ตรวจสอบ FormCollection แสดงรายการค่าเป็น "จริงเท็จ" แทนที่จะเป็นเพียงแค่ความจริง
เห็นได้ชัดว่าฉันขาดอะไรบางอย่าง ฉันคิดว่าสิ่งนี้ถูกสร้างขึ้นโดยมีแนวคิดอยู่ในใจว่าวัตถุในคอลเล็กชันที่ดำเนินการภายในรูปแบบ html นั้นได้รับการอัปเดตโดยใช้UpdateModel()
หรือผ่าน ModelBinder
แต่วัตถุของฉันไม่ได้ตั้งค่าสำหรับสิ่งนี้ หมายความว่านี่เป็นวิธีเดียวหรือไม่ มีวิธีอื่นที่จะทำหรือไม่