除非我停止/开始调试

时间:2018-05-29 20:40:55

标签: c# asp.net-mvc entity

我有一个DbSet实体db.Payscales

我的网站上有一个页面,您可以在其中更新薪资级别,还有一个页面可以从下拉菜单中选择薪级。

更新薪级表非常有效,甚至可以更改数据库中的值。但是,在下拉列表中,值不会更新。它在项目构建时保留了“已知”的最后一个值。

解决此问题的唯一方法是停止调试并再次启动站点(基本上重建),然后重新启动它。在此之后,值会在下拉列表中正确显示。

如果我不够彻底,我道歉,但这似乎是关于实体的一般性问题,而不是代码本身的问题。

为了安全起见,这是下拉菜单的代码:

DropDownValues.cs

public static List<SelectListItem> GetPayScaleList()
{
    List<SelectListItem> ls = new List<SelectListItem>();
    ls.Add(new SelectListItem() { Text = "", Value = "" });
    foreach (var temp in db.PayScales)
    {
        ls.Add(new SelectListItem() { Text = temp.Salary + "|" + temp.BaseGross, Value = temp.Salary.ToString() });
    }
    return ls;
}

以及实际下拉菜单本身的代码:

@Html.DropDownListFor(modelItem => modelItem.teacher.SalaryCode , TeachersProj.Models.DropDropValues.GetPayScaleList())

编辑:

自请求以来,这里也是更新方法!

PayScalesController.cs

//
// POST: /PayScales/Edit/5

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(PayScale payscale)
{
    if (ModelState.IsValid)
    {

        db.Entry(payscale).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(payscale);
}

2 个答案:

答案 0 :(得分:0)

听起来我只需要在数据库更新后刷新页面。由于您使用@Html指令(我假设这是一个基于此的MVC项目)来获取下拉列表,因此列表的内容是在加载页面时定义的。在重新加载页面之前,更新数据库不会反映在UI中。

如果要在没有页面重新加载的情况下动态更新下拉列表,则需要实现某种类型的Ajax轮询,调用GetPayScaleList()并设置下拉列表内容或实现某种SignalR推送式更新(可能有点矫枉过正)。

编辑:

请尝试使用此更新逻辑:

public ActionResult Edit(PayScale payscale)
{
    if (ModelState.IsValid)
    {
        var existingEntry = db.Find(payscale);
        if(existingEntry != null)
        {
             db.Entry(existingEntry).CurrentValues.SetValues(payscale);
             db.SaveChanges();
        }
        else
        {
             //Handle updating a missing record how you want
        }
        return RedirectToAction("Index");
    }
    return View(payscale);
}

答案 1 :(得分:0)

结果实体WAS更新,由于某种原因需要一个多小时才能更新。

当停止和重建时,这迫使一些行动通过,这就是它正在更新的原因。但是我休息了一会儿又回来了,而且没有我做的更新。