Выбранное значение не работает в SelectList
сущность "Материал"
public class Material
{
public int Id { get; set; }
public string? Name { get; set; }
public string? Unit { get; set; }
public double? Count { get; set; }
public double? Amount { get; set; }
public double? Cost { get; set; }
}
часть кода контроллера
public async Task<IActionResult> Material{
...
ViewData["Material"] = new SelectList(await Materials(), "Id", "Name",
sqlParameters[0].Value);
}
часть кода для просмотра
<select asp-for = "Material" class = "form-control" asp-items = "ViewBag.Material"></select>
Я пытался передать выбранное значение тремя способами
ViewData["Материал"] = новый SelectList(ожидание материалов(), "Идентификатор", "Имя", 21);
ViewData["Материал"] = новый SelectList(ожидание материалов(), "Идентификатор", "Имя", «21»);
ViewData["Материал"] = новый SelectList(ожидание материалов(), "Идентификатор", "Имя", «Сыворотка»);
Но у меня нет ошибок. В списке выбора я вижу первый элемент вместо второго. Список предметов показывает, что все в порядке, и у меня здесь нет проблем.
Я только что проверил ваш код, и он работает для меня. Вы можете попробовать это без базы данных:
public async Task<IActionResult> OnGetAsync()
{
var materials = new List<Material>
{
new Material
{
Name = "Test",
Id = 1
},
new Material
{
Name = "Test2",
Id = 2
}
};
ViewData["Material"] = new SelectList(materials, "Id", "Name", 2);
return Page();
}
И в файле .cshtml:
<select asp-items = "ViewBag.Material"></select>
А вы уверены, что ваш код вызывается? Имя функции Material
не вызывается фреймворком. Если вы хотите, чтобы ваш код выполнялся по HTTP-запросу GET, вам нужно переименовать метод в OnGetAsync
Выбранное значение не работает в SelectList. Но у меня нет ошибок. В списке выбора вместо этого я вижу первый элемент секунды. Список предметов показывает, что все в порядке, и у меня нет проблемы здесь.
На самом деле, моя первая точка зрения на ваш <select asp-for = "Material">
это тип SelectList, который ожидает список элементов, я не совсем уверен, что вы поделились правильной моделью, потому что здесь нам нужно что-то типа selectList of List Of Object, но ваш общий материал является единым классом.
Кроме того, чтобы сохранить выбранный элемент раскрывающегося списка в SelectList, у нас есть элементы перегрузки выбранного значения следующим образом:
В вашем сценарии это идентификатор 21 (Whey), который вы пытаетесь сохранить выбранным. Но строка не будет правильным параметром, который является ключом, но нам нужно значение.
Как я воспроизвожу вашу проблему:
Модель:
public class MaterialClass
{
public int Id { get; set; }
public string? Name { get; set; }
}
Примечание. Только с учетом ваших полей «Идентификатор» и «Имя».
Просмотр модели:
public class MaterialViewModel
{
public List<SelectListItem> MaterialClassList { get; set; }
}
Примечание. Поскольку нам нужен список элементов, я создал модель представления SelectListItem внутри <select asp-for = "ListTypeObject">
, таким образом, взяв эту модель представления. Однако это не обязательно, вы все равно можете использовать класс Material.
Контроллер:
public async Task<IActionResult> Material()
{
ViewData["Material"] = new SelectList(await Materials(), "Id", "Name", 21);
return View();
}
Материалы () Метод:
Поскольку вы не предоставили сведения о методе Materials, предполагается, что он возвращает список ваших объектов MaterialClass. Следовательно, я воспроизвел следующее:
public async Task<List<MaterialClass>> Materials()
{
var materials = new List<MaterialClass>()
{
new MaterialClass {Name = "Milk", Id = 20},
new MaterialClass {Name = "Whey", Id= 21},
new MaterialClass {Name = "Jgv", Id = 22},
};
return materials;
}
Вид:
@model MyProject.ModelFolder.MaterialViewModel
<select asp-for = "MaterialClassList" class = "form-control" asp-items = "ViewBag.Material"></select>
Отлаживать:
Выход:
Примечание. Если вы заметили вывод, я получаю ожидаемый результат. Просто убедитесь в своем sqlParameters[0].Value
и попробуйте отладить и проверить, имеет ли выбранный объект значения правильные параметры.
Что такое
Materials
, какого он типа, какие данные там присутствуют?