Если вы попытаетесь получить два разных массива, как показано в коде действия контроллера, возникнет проблема с текстом для невыбранных элементов, массив для флажков будет привязан, как и ожидалось, но для описаний будет другим, просто чтобы быть понятным, проверьте следующий пример:
Предполагается, что у нас есть список с опциями дерева:
- 100 - Foo
- 200 - Бар
- 300 - Zaz
Если мы установим следующий выбор для элементов:
Если мы посмотрим на запрос, это необработанный запрос:
checklist = 100,300
Extradecription = a,null,c
Итак, проблема состоит в том, чтобы избежать привязки нулевых описаний для невыбранных опций, это сложно, в этом случае я рекомендую вам четкое решение:
- Создание модели для создания процесса сущности
- Создать модель для опции
- Добавление списка опционной модели в модель создания сущности
- Инициализация модели для создания новой сущности
- Отображение входных данных с использованием тега asp-for
- Получить запрос на создание нового объекта
Я приму название моделей и свойств, чтобы показать, как связать типизированный массив в вашем запросе, изменить имена в соответствии с вашим сценарием.
Создать модель сущности:
public class CreateEntity
{
public CreateEntity()
{
Items = new List<SelectedItem>();
}
// Step 3
[BindProperty]
public List<SelectedItem> Items { get; set; }
// Another properties
}
Модель для варианта:
public class SelectedItem
{
public bool IsSelected { get; set; }
public int Code { get; set; }
public string Name { get; set; }
public string Desc { get; set; }
}
Отображение списка опций:
@for (var i = 0; i < Model.Items.Count; i++)
{
<input asp-for="@Model.Items[i].IsSelected" />@Model.Items[i].Name
<input asp-for="@Model.Items[i].Desc" />
<br/>
}
Действия GET и POST в контроллере:
[HttpGet]
public IActionResult CreateOption()
{
// Set the items list
var model = new CreateEntity
{
Items = new List<SelectedItem>
{
new SelectedItem{ Code = 100, Name = "Foo" },
new SelectedItem{ Code = 200, Name = "Bar" },
new SelectedItem{ Code = 300, Name = "Zaz" }
}
};
return View(model);
}
[HttpPost]
public IActionResult CreateOption(CreateEntity form)
{
// Retrieve only selected items
var query = form.Items.Where(item => item.IsSelected == true).ToList();
return View();
}
Если вы хотите узнать больше о флажках на страницах Razor, проверьте эту ссылку: Флажки в форме страниц Razor
Пожалуйста, дайте мне знать, если этот ответ полезен.