У меня есть идея создать запись для базы данных, используя раскрывающийся список, уже содержащий данные из той же базы данных, но из других таблиц.
Моя частичная база данных выглядит следующим образом:
В Visual Studio я использовал автоматическое создание таблиц, я создал ModelView для пропуска с использованием Id. Идентификатор генерируется автоматически, поэтому нет необходимости использовать идентификатор для изменения номера идентификатора. Ниже представлены модели:
ModelView использует раскрывающийся список, а выбранные элементы из раскрывающихся списков должны быть перенесены в базу данных. вместе с основными данными, введенными пользователем.
Попытка кода программы:
Контроллер
public IActionResult Create()
{
ObjectViewModel model = new ObjectViewModel();
foreach (var object in _context.ObjectA)
{
model.ObjectA.Add(new SelectListItem { Text = object.A, Value = object.IdA });
}
foreach (var hear in _context.ObjectB)
{
model.ObjectB.Add(new SelectListItem { Text = object.B, Value = object.IdB });
}
foreach (var object in _context.ObjectC)
{
model.ObjectC.Add(new SelectListItem { Text = object.C, Value = object.IdC });
}
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(string IdA, string IdB, string IdC)
{
ObjectViewModel model = new ObjectViewModel();
ObjectABC abc = new ObjectABC();
if (ModelState.IsValid)
{
foreach (var object in _context.ObjectA)
{
model.ObjectA.Add(new SelectListItem { Text = object.A, Value = object.IdA });
}
if (IdA != string.Empty)
{
var objectsA = (from a in _context.ObjectABC
where a.IdA == IdA
select a).ToList();
if (IdB != string.Empty)
{
var objectsB = (from b in _context.ObjectABC
where b.IdB == IdB
select b).ToList();
foreach (var object in _context.ObjectB)
{
model.ObjectB.Add(new SelectListItem { Text = object.B, Value = object.IdB });
}
if (IdC != string.Empty)
{
var objectsC = (from c in _context.ObjectABC
where c.IdC == IdC
select c).ToList();
foreach (var object in _context.ObjectC)
{
model.ObjectC.Add(new SelectListItem { Text = object.C, Value = object.IdC });
}
}
}
}
_context.Add(abc);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(model);
}
Просмотр
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-gr">
<label asp-for="ObjectA" class="control-label"></label>
<select asp-for="IdA" class="select-style" asp-items="Model.objectsA">
<option value = "" > --Select option--</option>
</select>
</div>
<div class="form-gr">
<label asp-for="ObjectB" class="control-label"></label>
<select asp-for="IdB" class="select-style" asp-items="Model.objectsB">
<option value = "" > --Select option--</option>
</select>
</div>
<div class="form-gr">
<label asp-for="ObjectC" class="control-label"></label>
<select asp-for="IdC" class="select-style" asp-items="Model.objectsC">
<option value = "" > --Select option--</option>
</select>
</div>
<div class="form-gr">
<label asp-for="Price" class="control-label"></label>
<input asp-for="Price" class="form-control" />
<span asp-validation-for="Price" class="text-danger"></span>
</div>
<div class="form-gr">
<input type = "submit" value="Create" class="btn btn-primary" />
</div>
</form>
Но это не работает .. Есть идеи?