如何使用从视图到控制器的 ViewBag 在 SQL Db 中存储多个复选框选择?

Posted

技术标签:

【中文标题】如何使用从视图到控制器的 ViewBag 在 SQL Db 中存储多个复选框选择?【英文标题】:How to Store multiple check box selection in SQL Db using ViewBag from View to Controller? 【发布时间】:2021-07-29 16:16:05 【问题描述】:

如何将多选值从 ViewBag 传递到 Controller 并保存为 Db 的相应数据类型。使用我当前的代码,我可以将在 View 中选择的值带到 Action 方法,但更新后 Contoller 只保存属性选择列表中的最后一个值。

它应该以这种格式存储信息

LeaseID = 1,2,3

LeaseStatus 将存储为 Rented、Vacant、OwnerOccupied

目前它保存为 = 3(如果全选 3)

下面是我的操作方法

public ActionResult ReviewProperty(Property model, List<Leasing> LeasingStatus)

int id = model.PropId;

            

var uName = User.Identity.Name;


if (!ModelState.IsValid)

return View(model);


using (Db db = new Db())

Property dto = db.Properties.Find(id);

dto.OwnerName = model.OwnerName;
dto.OwnerMobNumber = model.OwnerMobNumber;
dto.AlterContactNum = model.AlterContactNum;
dto.OwnerEmail = model.OwnerEmail;
dto.PropertyStatus = model.PropertyStatus;

db.SaveChanges();

foreach(var lease in LeasingStatus)

dto.LeaseID = lease.LeaseID;
                    

Leasing leaseDTO = db.Leasings.Where(x => x.LeaseID == dto.LeaseID).ToArray().ToList().FirstOrDefault();

dto.LeaseStatus = leaseDTO.LeaseStatus;

db.Properties.Add(dto);

db.SaveChanges();


TempData["SM"] = "Changes successfully updated!";

return RedirectToAction("MyPendingTask");

查看

@for (int i = 0; i < ViewBag.ListLease.Count; i++)

<div class="form-row">


<div class="form-check">

<input type="checkbox" id="@ViewBag.ListLease[i].LeaseStatus" name="[@i].LeaseID" value="@ViewBag.ListLease[i].LeaseID" checked="@ViewBag.ListLease[i].isChecked" />
<label class="form-check-label">
@ViewBag.ListLease[i].LeaseStatus
</label>
</div>

</div>

【问题讨论】:

【参考方案1】:

您将数据保存在循环之外,以便将数据保存在循环内,这将保存您的所有数据,所有 ids

foreach (var lease in LeasingStatus)

    dto.LeaseID = lease.LeaseID;
    Leasing leaseDTO = db.Leasings.Where(x => x.LeaseID == dto.LeaseID).ToArray().ToList().FirstOrDefault();

    dto.LeaseStatus = leaseDTO.LeaseStatus;
    db.Properties.Add(dto);
    db.SaveChanges();

【讨论】:

嗨@Ramesh 我确实尝试了您的解决方案,它使用选定的 LeaseID 复制 Db 中的条目,然后我只是尝试 SaveChanges() 并删除 Add(dto),但没有成功。它再次保存最后选择的 CheckBox 而不是我选择的 2。 尝试使用IEnumerable&lt;int&gt; yourID我希望这对你有帮助@RS

以上是关于如何使用从视图到控制器的 ViewBag 在 SQL Db 中存储多个复选框选择?的主要内容,如果未能解决你的问题,请参考以下文章

从控制器到视图的数据传递

无法显示从控制器到视图的LINQ查询输出值

编辑 NEW 使用 HttpPost 将数据从控制器传递到视图

控制器到视图的传值方式

如何将数据从剃刀视图传递到 mvc3 中的控制器?

MVC 将 ViewBag 传递给控制器