. Net Core - Редактирование ListBoxFor - выбранные параметры не отображаются - PullRequest
1 голос
/ 30 мая 2020

Я пытаюсь отредактировать список множественного выбора.

В моей модели представления у меня есть следующие поля: (среди прочих)

            public List<string> BloodExamsSelected { get; set; }
            public List<BloodExamsRef> BloodExams { get; set; }
            public List<string> UrineExamsSelected { get; set; }
            public List<UrineExamsRef> UrineExams { get; set; }
            public List<SelectListItem> _dbBloodExams { get; set; }
            public List<SelectListItem> _dbUrineExams { get; set; }

На контроллере я ' m передача значений из базы данных в _dbBloodExams и _dbUrineExams. Кроме того, BloodExams и UrineExams жестко запрограммированы и предопределены.

x.BloodExams = new List<BloodExamsRef>
                {
                    new BloodExamsRef(){BloodTest="Blood01T",Unit="m/L",Low=1.2,High=4.9},
                    new BloodExamsRef(){BloodTest="Blood02T",Unit="m/L",Low=1.2,High=4.9},
                    new BloodExamsRef(){BloodTest="Blood03T",Unit="m/L",Low=1.2,High=4.9},
                    new BloodExamsRef(){BloodTest="Blood04T",Unit="m/L",Low=1.2,High=4.9},
                    new BloodExamsRef(){BloodTest="Blood05T",Unit="m/L",Low=1.2,High=4.9},
                    new BloodExamsRef(){BloodTest="Blood06T",Unit="m/L",Low=1.2,High=4.9},
                    new BloodExamsRef(){BloodTest="Blood07T",Unit="m/L",Low=1.2,High=4.9},
                    new BloodExamsRef(){BloodTest="Blood08T",Unit="m/L",Low=1.2,High=4.9},
                    new BloodExamsRef(){BloodTest="Blood09T",Unit="m/L",Low=1.2,High=4.9},
                    new BloodExamsRef(){BloodTest="Blood010T",Unit="m/L",Low=1.2,High=4.9}
                };
            x.UrineExams = new List<UrineExamsRef>
                {
                    new UrineExamsRef(){UrineTest="Urine01T",ReferenceInterval="Od do",Unit="mol/dL"},
                    new UrineExamsRef(){UrineTest="Urine02T",ReferenceInterval="Od do",Unit="mol/dL"},
                    new UrineExamsRef(){UrineTest="Urine03T",ReferenceInterval="Od do",Unit="mol/dL"},
                    new UrineExamsRef(){UrineTest="Urine04T",ReferenceInterval="Od do",Unit="mol/dL"},
                    new UrineExamsRef(){UrineTest="Urine05T",ReferenceInterval="Od do",Unit="mol/dL"},
                    new UrineExamsRef(){UrineTest="Urine06T",ReferenceInterval="Od do",Unit="mol/dL"},
                    new UrineExamsRef(){UrineTest="Urine07T",ReferenceInterval="Od do",Unit="mol/dL"},
                    new UrineExamsRef(){UrineTest="Urine08T",ReferenceInterval="Od do",Unit="mol/dL"},
                    new UrineExamsRef(){UrineTest="Urine09T",ReferenceInterval="Od do",Unit="mol/dL"},
                    new UrineExamsRef(){UrineTest="Urine010T",ReferenceInterval="Od do",Unit="mol/dL"}
                };

            x._dbBloodExams = _db.BloodExaminations.Where(ui => ui.ReferralsId == x.Id).Select(z => new SelectListItem
            {
                Value = z.BloodTest,
                Text = z.BloodTest,
                Selected = true

            }).ToList();

            x._dbUrineExams = _db.UrineExaminations.Where(ui => ui.ReferralsId == x.Id).Select(z => new SelectListItem
            {
                Value=z.UrineTest,
                Text = z.UrineTest,
                Selected =true

            }).ToList();

В режиме редактирования у меня проблема! Отображается весь предопределенный список, но не выбрано то, что уже есть в базе данных !!!

<div class="d-inline-block">
        @Html.LabelFor(Model => Model.BloodExamsSelected, new { @class = "col-sm-12" })
        @Html.ListBoxFor(Model => Model.BloodExamsSelected, new MultiSelectList(Model.BloodExams, "BloodTest", "BloodTest", Model._dbBloodExams), new { htmlAttributes = new {@name="MSL", @class = "form-control", @multiple = "multiple" } })<br />
        @Html.ValidationMessageFor(Model => Model.BloodExamsSelected, "", new { @class = "text-danger" })
    </div>
    <div class="d-inline-block">
        @Html.LabelFor(Model => Model.UrineExamsSelected, new { @class = "col-sm-12" })
        @Html.ListBoxFor(Model => Model.UrineExamsSelected, new SelectList(Model.UrineExams, "UrineTest", "UrineTest", Model._dbUrineExams), new { htmlAttributes = new { @name = "MSL", @class = "form-control", @multiple="multiple" } })<br />
        @Html.ValidationMessageFor(Model => Model.UrineExamsSelected, "", new { @class = "text-danger" })
    </div>

Image of edit referral screen

Есть ли способ заставить это работать? Заранее спасибо!

1 Ответ

0 голосов
/ 31 мая 2020

Уловка заключалась в том, чтобы заполнить список выбранных объектов на контроллере и передать его также в представление:

x.BloodExamsSelected= _db.BloodExaminations.Where(bi => bi.ReferralsId == x.Id).Select(n => n.BloodTest).ToList();
x.UrineExamsSelected = _db.UrineExaminations.Where(ui => ui.ReferralsId == x.Id).Select(n => n.UrineTest).ToList();

(Вероятно, в представлении выбранные объекты (Model._db? ???? Exams) сравниваются с массивом Model.?????ExamsSelected!?)

 @Html.ListBoxFor(Model => Model.BloodExamsSelected, new MultiSelectList(Model.BloodExams, "BloodTest", "BloodTest", Model._dbBloodExams), new { @style = "height:200px; width:200px; text-align:center;", @name = "MSL1", @class = "form-control", @multiple = "multiple" })
@Html.ListBoxFor(Model => Model.UrineExamsSelected, new MultiSelectList(Model.UrineExams, "UrineTest", "UrineTest", Model._dbUrineExams), new { @style = "height:200px; width:200px; text-align:center;", @name = "MSL2", @class = "form-control", @multiple = "multiple" })

Так или иначе, теперь все работает так, как задумано: D enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...