【问题标题】:Entities may have been modified or deleted since entities were loaded. (ASP.NET MVC)自加载实体后,实体可能已被修改或删除。 (ASP.NET MVC)
【发布时间】:2017-03-19 10:15:27
【问题描述】:

我尝试从 SelectedList 更新表中的一个属性

这是我的模型

 public partial class Interwier
{
    [Key]
    public int Interwier_id { get; set; }
    [Display(Name = "ФИО")]
    public string FIO { get; set; }
    [Display(Name = "Email")]
    public string Email { get; set; }
    [Display(Name = "Телефон")]
    public string Telephone { get; set; }
    [Display(Name = "День рождения")]
    public System.DateTime Birthday { get; set; }
    [Display(Name = "Город")]
    public string City { get; set; }
    [Display(Name = "Зарплата")]
    public string Salary { get; set; }
    [Display(Name = "Английский язык")]
    public string English { get; set; }
    public Nullable<int> VacancyId { get; set; }
    public string Status { get; set; }

    public virtual Vacancy Vacancy { get; set; }
}

我需要更新Status 属性。

这是控制器中的编辑操作

public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Interwier interwierModel = db.InterwierModels.Find(id);
        if (interwierModel == null)
        {
            return HttpNotFound();
        }
        return View(interwierModel);
    }

    // POST: Interwier/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "Id,Email,Telephone,Birthday,City,Salary,English,Status")] Interwier interwierModel)
    {
        if (ModelState.IsValid)
        {
            db.Entry(interwierModel).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Incoming");
        }
        return View(interwierModel);
    }

这是它在视图上的外观

<div class="form-group" style="padding-left: 515px;">
        <div class="col-md-10">

            @Html.DropDownListFor(model => model.Status, new[]
                {
                    new SelectListItem() {Text = "Подтвердить", Value = "Одобрено"},
                    new SelectListItem() {Text = "Отправить в архив", Value = "Архив"},
                }, "Статус", new { @class = "form-control" })

        </div>
    </div>

当我点击提交按钮时出现此错误

我该如何处理?

【问题讨论】:

    标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4


    【解决方案1】:

    您需要包含Interwier_id 属性作为隐藏字段。使用HiddenFor 扩展方法。您不会将 ID 发布到服务器,这就是 EF 在数据库中找不到实体的原因。假设下面的代码在BeginForm 块内。

    @Html.DropDownListFor(model => model.Interwier_id)
    
    <div class="form-group" style="padding-left: 515px;">
        <div class="col-md-10">
    
            @Html.DropDownListFor(model => model.Status, new[]
                {
                    new SelectListItem() {Text = "Подтвердить", Value = "Одобрено"},
                    new SelectListItem() {Text = "Отправить в архив", Value = "Архив"},
                }, "Статус", new { @class = "form-control" })
    
        </div>
    </div>
    

    并且还更新您从 Id 绑定到 Interwier_id 的属性:

    [Bind(Include = "Interwier_id,...")]
    

    【讨论】:

    • 我需要这样写还是在哪里写? @using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.HiddenFor(model =&gt; model.Interwier_id)
    • 是的,您需要在表单内完成。我以为你已经有了。你可以把它放在你旁边DropDownListFor列表。
    • 嗯,我试过@Html.HiddenFor(model =&gt; model.Interwier_id) 不起作用。 pastebin.com/jGenNqan也许我做的不对?
    • 喜欢这个? [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "Id,Email,Telephone,Birthday,City,Salary,English,Status")] Interwier interwierModel) { if (ModelState.IsValid) { db.InterwierModels.Attach(interwierModel); db.Entry(interwierModel).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Incoming"); } return View(interwierModel); }
    • 不,抱歉,Entry 方法正是这样做的。我已经更新了答案,看来你没有正确绑定Id。
    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多