我有一个使用下拉列表为数据库创建记录的概念,该列表已经包含来自同一数据库但来自其他表的数据。
我的部分数据库如下:
在Visual Studio中,我使用了自动表支架,我创建了ModelView来跳过使用ID。 ID是自动生成的,因此不需要使用ID来更改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>
但是它不起作用。有什么想法吗?