Ядро Asp.Net Tempdata и redirecttoaction не работают - PullRequest
0 голосов
/ 10 июня 2019

В моем классе basecontroller есть метод, который добавляет данные в tempdata для отображения всплывающих сообщений.

protected void AddPopupMessage(SeverityLevels severityLevel, string title, string message)
{
    var newPopupMessage = new PopupMessage()
    {
        SeverityLevel = severityLevel,
        Title = title,
        Message = message
    };
    _popupMessages.Add(newPopupMessage);
    TempData["PopupMessages"] = _popupMessages;
}

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

InvalidOperationException: The 'Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.TempDataSerializer' cannot serialize an object of type

Есть мысли?

1 Ответ

1 голос
/ 10 июня 2019

TempData использует Session, что само по себе использует IDistributedCache. IDistributedCache не имеет возможности принимать объекты или сериализовать объекты. В результате вам нужно сделать это самостоятельно, т.е.

TempData["PopupMessages"] = JsonConvert.SerializeObject(_popupMessages);

Затем, конечно, после перенаправления вам нужно будет десериализовать его обратно в нужный вам объект:

ViewData["PopupMessages"] = JsonConvert.DeserializeObject<List<PopupMessage>>(TempData["PopupMessages"]);
...