gpt4 book ai didi

asp.net - 如何使用 View 中的下拉列表将数据从 ViewModel 插入到数据库

转载 作者:行者123 更新时间:2023-12-04 04:22:37 24 4
gpt4 key购买 nike

我有使用下拉列表为数据库创建记录的概念,该列表已经包含来自同一数据库但来自其他表的数据。

我的部分数据库如下所示:

enter image description here

在 Visual Studio 中,我使用了自动表脚手架,我创建了 ModelView 以跳过使用 Id。 id 是自动生成的,因此不需要使用 Id 来更改 ID 号。以下是模型:

enter image description here

ModelView 使用下拉列表,下拉列表中的选定项将与用户输入的基本数据一起传输到数据库。

程序代码尝试:

Controller

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>

但它不起作用..有什么想法吗?

最佳答案

你不填写ObjectABC的属性,你可以像这样发布创建 Action

 [HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(string IdA, string IdB, string IdC)
{
ObjectABC abc = new ObjectABC();

if (ModelState.IsValid)
{
if (IdA != string.Empty && IdB != string.Empty && IdC != string.Empty)
{
abc.IdA = IdA;
abc.IdB = IdB;
abc.IdC = IdC;
_context.Add(abc);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
}

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 });

model.IdA = IdA;
model.IdB = IdB;
model.IdC = IdC;

return View(model);
}

关于asp.net - 如何使用 View 中的下拉列表将数据从 ViewModel 插入到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58738852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com