Ошибка Ajax 500: обнаружена циклическая ссылка - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь обновить свой вид новой информацией, поэтому, когда она отправляется на контроллер для сохранения, информация передается. Тот же метод работает нормально при создании объекта (Create-View), но выдает ошибку ajax 500: при сериализации объекта типа 'System.Data.Entity.DynamicProxies.Gutscheine_' обнаружена циклическая ссылка при редактировании существующего объекта (Edit-View).

Вот мой ajax-вызов:

function onCloseButtonClick(s) {
        $.ajax({
            type: "POST",
            url: "@Url.Action("UpdateGutscheinEdit")",
            data: { sBild: document.getElementById(s).value, bIcon: true },
            success: function (response) {
                document.getElementById("sBild").value = response.sBild;
                document.getElementById("bIcon").value = response.bIcon;
                document.getElementById("fileToUpload").value = "";
                popupIconAuswaehlen.Hide();
            },
            error: function (jqxhr, status, exception) {
                alert(jqxhr.status); //throws 500
                alert('Exception', exception);
            }
        })
    }

А вот метод:

public ActionResult UpdateGutscheinEdit(string sBild, bool bIcon)
        {
            Gutscheine currentGutschein = Session["CurrentGutscheinEdit"] as Gutscheine;
            if (!string.IsNullOrEmpty(sBild))
            {
                currentGutschein.sBild = sBild;
                currentGutschein.bIcon = bIcon;
            }
            Session["CurrentGutscheinEdit"] = currentGutschein;
            return Json(currentGutschein);
        }

Метод Edit- (get) являетсястандартный:

public ActionResult Edit(string id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Gutscheine gutscheine = db.Gutscheine.Find(id);
            if (gutscheine == null)
            {
                return HttpNotFound();
            }

            if(Session["CurrentGutscheinEdit"] == null)
            {
                Session["CurrentGutscheinEdit"] = gutscheine;
            }
            return View(Session["CurrentGutscheinEdit"] as Gutscheine);
        }

Циркулярная ссылка дает некоторую подсказку, но я довольно новичок во всем этом, так что это не сильно помогает мне в решении проблемы. Если у вас есть идеи, как это исправить, пожалуйста, дайте мне знать. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 24 октября 2019

Добавление db.Configuration.ProxyCreationEnabled = false; перед получением объекта из базы данных сделало свое дело.

Законченный код: (Я также удалил некоторые вещи в конце, которые напортачили что-то еще)

public ActionResult Edit(string id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            db.Configuration.ProxyCreationEnabled = false;
            Gutscheine gutscheine = db.Gutscheine.Find(id);
            if (gutscheine == null)
            {
                return HttpNotFound();
            }

            Session["CurrentGutscheinEdit"] = gutscheine;

            return View(Session["CurrentGutscheinEdit"] as Gutscheine);
        }

Большое спасибо комментатору, предоставившему ссылку!

...