Asp.net 如何使用视图中的下拉列表将数据从ViewModel插入数据库
我的概念是使用下拉列表为数据库创建一个记录,其中已经包含来自同一数据库但来自其他表的数据 我的部分数据库如下所示: 在VisualStudio中,我使用了自动表脚手架,我创建了ModelView以使用Id跳过。Id是自动生成的,因此不需要使用Id来更改Id号。以下是模型: ModelView使用下拉列表,从下拉列表中选择的项目将与用户输入的基本数据一起传输到数据库 程序代码尝试: 控制器 看法Asp.net 如何使用视图中的下拉列表将数据从ViewModel插入数据库,asp.net,asp.net-mvc,asp.net-core,Asp.net,Asp.net Mvc,Asp.net Core,我的概念是使用下拉列表为数据库创建一个记录,其中已经包含来自同一数据库但来自其他表的数据 我的部分数据库如下所示: 在VisualStudio中,我使用了自动表脚手架,我创建了ModelView以使用Id跳过。Id是自动生成的,因此不需要使用Id来更改Id号。以下是模型: ModelView使用下拉列表,从下拉列表中选择的项目将与用户输入的基本数据一起传输到数据库 程序代码尝试: 控制器 看法 但是它不起作用。。有什么想法吗?您不必填写ObjectABC的属性,您可以像这样发布创建操作 [Ht
但是它不起作用。。有什么想法吗?您不必填写ObjectABC的属性,您可以像这样发布创建操作
[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);
}
您的代码未编译:foreach var object in _context.ObjectBAlso检查ModelState.IsValid仅在将ViewModel传递到控制器时才有意义。。。在本例中,您将传入三个字符串string IdA、string IdB、string IdC,然后在不使用任何输入参数的情况下初始化ViewModel!为什么你认为模型状态可能无效?你太棒了!谢谢你,兄弟!啤酒给你!!
<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>
[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);
}