แสดงรายการที่เลือกในกล่องรายการแบบเลือกหลายรายการ

ฉันได้ลองวิธีต่างๆ เพื่อให้สิ่งนี้ใช้งานได้ ฉันคิดว่าบางทีฉันอาจมีบางอย่างขาดหายไปในโมเดลหรือคอนโทรลเลอร์ของฉัน ดังนั้นฉันจึงโพสต์ทั้งสามส่วน

ฉันมีข้อมูลในฐานข้อมูลที่แสดงหัวข้อให้คำปรึกษาที่เลือกโดยที่ปรึกษาในการนัดหมายครั้งก่อน เมื่อที่ปรึกษาเรียกการนัดหมายนั้น แอปควรแสดงรายการหัวข้อที่เป็นไปได้ทั้งหมดโดยไฮไลต์หัวข้อที่เลือกไว้ก่อนหน้านี้ ทุกอย่างทำงานได้ยกเว้นบิตสุดท้าย

ฉันรู้ว่าฉันกำลังดึงข้อมูลที่ถูกต้องเนื่องจากสามารถแสดงรายการที่เลือกแยกกันได้ ฉันไม่สามารถทำให้พวกเขาถูกเลือกได้ นี่คือรหัส ฉันกำลังตัดส่วนที่ไม่เกี่ยวข้องออก

public class AppointmentModel
{ ...
    public string AdvisingTopicId { get; set; }
    public List<SelectListItem> AdvisingIdList { get; set; }
    public SelectList AdvisingTopicNames { get; set; }
}

public class HomeController : AdvisorBaseController
{ ...
        var topicCodes = appointment.advising_topic.ToList();

        var advisingTopics = new SelectList((from t in topicCodes
                              select t.name).ToList(), "name");

        var topicsList = (from t in db.advising_topic
                          select new SelectListItem
                          {
                              Selected = false,
                              Text = t.name,
                              Value = SqlFunctions.StringConvert((double)t.advising_topic_id).Trim()
                          }).ToList();

        foreach (var topicCode in topicCodes)
        {
            var selTopic = topicsList.Find(x => x.Value == topicCode.advising_topic_id.ToString());
            if (selTopic != null)
            {
                selTopic.Selected = true;
            }
        } ...
            var appointmentModel = new AppointmentModel
            { ...
                AdvisingTopicNames = advisingTopics,
                AdvisingIdList = topicsList,
            };

แล้วก็วิว

@model AcademicAdvising.Models.AppointmentModel
<h3>Advising Topics</h3>
<ul>
    @foreach (var item in Model.AdvisingTopicNames)
    {
        <li>@Html.DisplayFor(x => item)</li>
    }
</ul>
    @Html.ListBoxFor(m=>m.AdvisingIdList, new SelectList(Model.AdvisingTopicNames, "Value", "Text", Model.AdvisingTopicNames.SelectedValue))

โปรดทราบว่า foreach แสดงรายการที่เลือกอย่างถูกต้อง นั่นเป็นเพียงการทดสอบและจะถูกดึงออก ListBoxFor เป็นที่ที่ฉันกำลังดิ้นรน สิ่งที่ฉันมีอยู่ที่นี่ใช้งานไม่ได้ (แสดงรายการทั้งหมดโดยไม่มีการไฮไลต์) และนั่นคือส่วนที่ฉันได้ลองใช้วิธีการต่างๆ แต่ล้มเหลวทั้งหมด


person user2283231    schedule 01.05.2013    source แหล่งที่มา
comment
คำแนะนำของไบรอัน โรเบิร์ตส์ได้ผล นั่นคือ @Html.ListBox(myLB, Model.AdvisingIdList) ส่งคืนรายการที่ไฮไลต์ ดังนั้นฉันจะทำเครื่องหมายสิ่งนี้ว่าตอบแล้วแล้วออกไปแล้วลองหาสาเหตุว่าทำไมมันถึงใช้ไม่ได้กับ ListBoxFor   -  person user2283231    schedule 03.05.2013
comment
บางครั้งอาจมีปัญหาในการตั้งชื่อ ดูชื่อที่คุณกำลังกำหนด และตรวจสอบให้แน่ใจว่าคุณไม่ได้นำชื่อเหล่านั้นกลับมาใช้ซ้ำ ให้ความสนใจกับพารามิเตอร์สตริงการสืบค้นและรายการที่ใส่ลงใน viewbag   -  person Bryan Roberts    schedule 03.05.2013


คำตอบ (1)


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

 @Html.ListBoxFor(m=>m.AdvisingIdList, Model.AdvisingTopicNames)

แต่เมื่อพิจารณาตามจริงแล้วว่าคุณกำหนดรายการของคุณอย่างไร ฉันคิดว่าสิ่งที่คุณต้องการจริงๆ อาจเป็นได้

 @Html.ListBoxFor(m=>m.AdvisingIdList, Model.AdvisingIdList)
person Bryan Roberts    schedule 01.05.2013
comment
ทั้งสองไม่ได้ผล แบบแรกทำให้แสดงเฉพาะหัวข้อที่เลือกเท่านั้น (โดยไม่มีการเน้นสิ่งใด) ส่วนหลังทำให้หัวข้อทั้งหมดแสดง แต่ไม่มีสิ่งใดถูกเน้น ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว - person user2283231; 02.05.2013
comment
ฟังดูเหมือนปัญหาข้อมูล อันที่สองแสดงรายการทั้งหมด แต่สิ่งที่เกิดขึ้นดูเหมือนคุณไม่ได้ตั้งค่าอะไรเป็น 'selected' ลองตรวจสอบบรรทัดโค้ดของคุณ if (selTopic != null) { selTopic.Selected = true; } และตรวจสอบให้แน่ใจว่าหากถูกโจมตีจริงและมีบางอย่างกระตุ้นให้แฟล็กที่เลือกเป็นจริง - person Bryan Roberts; 02.05.2013
comment
ฉันคิดว่าฉันได้ตรวจสอบแล้ว แต่ฉันจะดูอีกครั้งเพราะความคิดของคุณก็เหมือนกับความคิดของฉันมาก มันแค่รู้สึกว่าปัญหาข้อมูลไม่ใช่ปัญหาในการนำเสนอ หากฉันสามารถแก้ไขได้ ฉันจะกลับมาเพื่อทำเครื่องหมายวิธีแก้ปัญหา - person user2283231; 02.05.2013
comment
ซอ จากผู้ควบคุมมันเป็นอย่างนั้นอย่างแน่นอน topicsList มีหัวข้อทั้งหมดและการดีบักแสดงว่าบางหัวข้อถูกตั้งค่าเป็น Selected=True ในขณะที่บางหัวข้อถูกตั้งค่าเป็น False พวกเขาเป็นคนที่ใช่ด้วยซ้ำ! :) นั่นหมายความว่าฟิลด์ชื่อ AdvisingIdList มีหัวข้อทั้งหมด 22 หัวข้อ โดยที่ Selected ตั้งค่าเป็น True ในบางหัวข้อ นั่นคือสิ่งที่ฉันต้องการ ตอนนี้ดูเหมือนว่าฉันกลับมาที่ปัญหาการนำเสนอแล้ว! - person user2283231; 02.05.2013
comment
ตอนนี้คุณกำลังใช้งาน @Html.ListBoxFor(m=›m.AdvisingIdList, Model.AdvisingIdList) อยู่ใช่ไหม? - person Bryan Roberts; 02.05.2013
comment
@Html.ListBoxFor(m=›m.AdvisingIdList, Model.AdvisingIdList) ถูกต้อง ฉันเพิ่งรันใหม่จาก Visual Studio ผลลัพธ์เดียวกัน: ฉันได้รับหัวข้อทั้งหมดโดยไม่มีการเน้นเพื่อแสดงว่าพวกเขาถูกเลือกไว้ก่อนหน้านี้ - person user2283231; 02.05.2013
comment
ฉันมีตัวอย่างพื้นฐานของการทำงานนี้ อาจมีปัญหาบางอย่างกับสิ่งต่าง ๆ ที่ถูกตั้งชื่อเหมือนกัน ลองใช้กล่องรายการปกติ @Html.ListBox(myLB, Model.AdvisingIdList) - person Bryan Roberts; 02.05.2013