如何使用View中的下拉列表将数据从ViewModel插入数据库

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

我的部分数据库如下:

如何使用View中的下拉列表将数据从ViewModel插入数据库

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

如何使用View中的下拉列表将数据从ViewModel插入数据库

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>

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

tangdandang 回答:如何使用View中的下拉列表将数据从ViewModel插入数据库

您没有填写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);
}
本文链接:https://www.f2er.com/3148806.html

大家都在问