Связывание checkBoxList на странице Razor с Viewdata

Я хочу связать CheckBoxList на странице Razor с Viewdata. У меня есть следующий код в моем индексе контроллера:

 public async Task<IActionResult> Index()
 {
var testSections = new List<ReassignmentSectionLookup>();
testSections = await _employeeService.GetTestSections();
 ViewData["testSections"] = new SelectList(testSections, "ReassignmentSectionLookupID", "Section");
return View();
}

У меня на странице бритвы есть следующее:

 <div class = "form-group row">

                    <div class = "col-md-12">

                        Select Test: <br />
                        @{
                            var select = ViewData["testSections"] as SelectList;
                            if (select != null && select.ToList().Count > 0)
                            {
                                foreach (var item in select.ToList())
                                {
                                    <input type = "checkbox" name = "selectedItems" value = "@item.Value" @(Html.Raw(item.Selected ? "checked=\"checked\"" : "")) /> @item.Text  <br />
                                }
                            }
                        }

                    </div>

При наведении курсора на выбор я вижу 12 элементов в списке:

когда я наводил курсор на select.ToList().Count, я получаю сообщение об ошибке «system.NullReferenceException». Я не уверен, что я делаю неправильно. Я вижу данные в select. ниже скриншот ошибки:

Если я попытаюсь сделать select.Items.ToList(), я получаю эту ошибку:

При использовании этой строки:

<input type = "checkbox" name = "selectedItems" value = "@item.Value" @(Html.Raw(item.Selected ? "checked=\"checked\"" : "")) /> @item.Text  <br />

Я получаю эту ошибку:

Так должно быть select.Items.ToList().Count > 0

Priyank Panchal 11.02.2023 05:48

Если я выберу select.Items.ToList().Count, я получаю еще одну ошибку. Я вставил скриншот ошибки в свой исходный пост.

Anjali 11.02.2023 05:56

Попробуйте поставить @using System.Linq в верхней части вашего cshtml.

Priyank Panchal 11.02.2023 06:16

Просто любопытно, почему бы не вернуть список с моделью, содержащей как свойство «ReassignmentSectionLookupID», так и свойство «Section» вместо использования SelectList? С моей точки зрения, SelectList используется, когда вы визуализируете набор данных в виде раскрывающегося списка с tag-helper (asp-items) или HtmlHelper (@Html.DropdownList()).

Yong Shun 11.02.2023 06:37

Можете ли вы привести пример для этого

Anjali 11.02.2023 06:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как обсуждалось в комментарии, я бы сказал, что SelectList не подходит, поскольку он используется для рендеринга элементов для выбора/раскрывающегося списка либо с помощью помощника по тегам (asp-items), либо с помощью HtmlHelper (@Html.DropdownList()).

  1. Создайте класс модели для набора данных.
public class ReassignmentSectionLookupOption
{
    public string Text { get; set; }
    public int Value { get; set; }
    public bool Selected { get; set; }
}
  1. Вместо того, чтобы возвращать данные как SelectList в ViewData, верните как List<ReassignmentSectionLookupOption> тип.
public async Task<IActionResult> Index()
{
    var testSections = await _employeeService.GetTestSections();
 
    ViewData["testSections"] = testSections
        .Select(x => new ReassignmentSectionLookupOption { Value = x.ReassignmentSectionLookupID, Text = x.Section })
        .ToList();

    return View();
}
  1. В представлении приведите ViewData к List<ReassignmentSectionLookupOption>. И вы можете использовать .Any(), чтобы проверить, не пуст ли список.
@{
    var testSections = ViewData["testSections"] as List<ReassignmentSectionLookupOption>;
    if (testSections != null && testSections.Any())
    {
        foreach (var item in testSections)
        {
            <input type = "checkbox" name = "selectedItems" value = "@item.Value" @(Html.Raw(item.Selected ? "checked=\"checked\"" : "")) /> @item.Text <br />
        }
    }
}

Я получаю небольшую ошибку, когда помещаю эту строку в режим бритвы: <input type = "checkbox" name = "selectedItems" value = "@item.Value" @(Html.Raw(item.Selected ? "checked=\" проверено\"" : "")) /> @item.Text <br /> } Я поместил снимок экрана в свой исходный пост.

Anjali 11.02.2023 20:30

Привет, кстати, тебе не нужна часть item.Selected. Если вы заинтересованы, вам нужно добавить свойство Selected в класс ReassignmentSectionLookupOption.

Yong Shun 12.02.2023 05:02

хорошо понял. Когда я делаю HTTPPost, я не вижу отмеченных значений. Поскольку это отдельный вопрос, я могу опубликовать этот вопрос отдельно.

Anjali 12.02.2023 05:16

Другие вопросы по теме