У меня есть сущность 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);
}
конечно, он не будет обновляться, потому что вы никогда не используете JavaScript для его обновления.
@ Стив, я не совсем понимаю, что вы имеете в виду?
@NillBye, вам нужно прочитать, как работает HTML. razor - это серверный движок, который генерирует HTML-код только один раз. После того, как он был отправлен пользователю, бритва ничего не контролирует.
@Steve Я хочу, чтобы раскрывающийся список создавался только один раз. Проблема в том, что объект, из которого берется раскрывающийся список, не обновляется должным образом при создании.
проверьте свою базу данных напрямую и посмотрите, внесены ли изменения. Если это так, то ваша логика выбора неверна. в противном случае ваше обновление необходимо исправить.





Мне кажется, вам просто нужно обновить страницу после обновления базы данных. Поскольку вы используете директиву @Html (я предполагаю, что это проект MVC, основанный на этом) для получения раскрывающегося списка, содержимое списка определяется при загрузке страницы. Обновление базы данных не отобразится в пользовательском интерфейсе, пока вы не перезагрузите страницу.
Если вы хотите динамически обновлять раскрывающийся список без перезагрузки страницы, вам нужно будет реализовать какой-то опрос Ajax, который вызывает GetPayScaleList() и устанавливает содержимое раскрывающегося списка, или реализовать какое-то обновление в стиле Push-style 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);
}
Обновление (включая жесткое), похоже, не помогает. Я добавил точку останова в список и просмотрел каждую строку, и прямо в foreach db.PayScales по-прежнему извлекает старое значение, хотя когда я добавляю точку останова в код обновления, db.PayScales имеет правильное значение ..
Поделитесь, пожалуйста, своим методом обновления. Похоже, ты не звонишь в context.SaveChanges() или что-то в этом роде.
Я отредактировал свой OP. Единственное, о чем я могу думать на данный момент, это то, что список статичен и поэтому не может обновляться ...? Однако, насколько я понимаю, список должен быть статическим, чтобы его можно было ввести в раскрывающееся меню, в противном случае вы получите «ссылка на объект требуется для нестатического поля». По правде говоря, я не очень хорошо знаю тоже о C#, я просто исправляю программу и бегу оттуда ...
@NillBye Я думаю, что ваша логика обновления не совсем там. Я обновил свой ответ. Вы, очевидно, можете захотеть справляться с ошибками иначе, чем я. Надеюсь, что это сработает!
Оказывается, сущность БЫЛА обновлением, почему-то на обновление уходит больше часа.
При остановке и восстановлении это вынудило выполнить некоторые действия, и поэтому он обновлялся. Но я сделал перерыв и вернулся позже, и он был обновлен без моего участия.
Возможно, вы захотите изучить это. Это ненормальное поведение.
Приносят ли вам новые значения обновление страницы (F5) или резкое обновление (Ctrl-F5)?