首页 > 解决方案 > 如何使用复选框更新实体框架中的记录

问题描述

我正在尝试使用 EF 更新记录。在我看来,我使用复选框来更新多条记录。我有 2 个问题 1)如何将编辑后的文本框值从视图传递到控制器并更新这些值?2)每次我编辑并更新它时,它都会添加旧数据而不是更新现有数据。

看法 :

@if (Model.Count > 0)
        {
            <div>
                @foreach (var books in Model)
                {
                        <div class="col-md-2">
                            @Html.EditorFor(model => books.caption)
                            @Html.ValidationMessageFor(model => books.caption)
                        </div>
                        
                        <div class="col-md-2">
                            @Html.EditorFor(model => books.copies)
                            @Html.ValidationMessageFor(model => photos.copies)
                        </div>
                        <div class="col-md-1">
                            <input type="checkbox" class="checkboxes" value="@books.id" name="id" />
                        </div>
               }
          </div>
}

<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="submit" name="submitButton" value="UPDATE" />
        <input type="submit" name="submitButton" value="ADD"/>
        <input type="submit" name="submitButton" value="DELETE" />
    </div>
</div>

控制器 :

public ActionResult EditBooks(int id, IEnumerable<int> id, string submitButton, [Bind(Include = "id,caption,copies")] Books books)
{
        if (ModelState.IsValid)
        {
            try
            {
                foreach (var item in id)
                {
                    var update = _db.Books.FirstOrDefault(s => s.id == item);

                    if (update != null)
                    {
                        _db.MyTable.Add(update);
                        _db.SaveChanges();
                    }

                    return RedirectToAction("Edit", new {id});
                }
            }
        }
}

标签: c#asp.netasp.net-mvcentity-framework

解决方案


根据您的逻辑,您将添加新记录而不是更新。你可以分析这段代码:

_db.MyTable.Add(update);

根据实体框架逻辑,您将更新项放入添加EF 操作集合。因此,要修复它,您需要将那段代码修改为:

_db.MyTable.Update(update);


推荐阅读