Я пытаюсь использовать временные данные для возврата сообщений, но выдает ошибку:
InvalidOperationException: Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.TempDataSerializer 'не может сериализовать объект типа
Я уже использую
services.AddMvc().AddSessionStateTempDataProvider();
app.UseSession()
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
});
Вот мой общий
FlashMessages.cshtml:
@using EnduroMotors.ViewModels
@{
var errorMessages = TempData["_error_messages"] as List<FlashMessageModel>
?? new List<FlashMessageModel>();
var warningMessages = TempData["_warning_messages"] as
List<FlashMessageModel> ?? new List<FlashMessageModel>();
var successMessages = TempData["_success_messages"] as
List<FlashMessageModel> ?? new List<FlashMessageModel>();
var infoMessages = TempData["_info_messages"] as List<FlashMessageModel> ??
new List<FlashMessageModel>();
}
Вот моя модель представления:
FlashMessageModel
public class FlashMessageModel
{
public string Title { get; set; }
public string Message { get; set; }
}
А вот использование в контроллере:
Контроллер
protected void ShowSuccessMessage(string message, string title =
"Success!")
{
var messages =
(List<FlashMessageModel>)TempData["_success_messages"] ?? new
List<FlashMessageModel>();
messages.Add(new FlashMessageModel
{
Title = title,
Message = message
});
TempData["_success_messages"] = messages;
}
используя это с возвратом
ShowSuccessMessage("You have completed.");
он должен показывать сообщение об успехе в индексе с @{Html.RenderPartial("FlashMessages");}
, но вместо этого он дает
InvalidOperationException: Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.TempDataSerializer 'не может сериализовать объект типа' EnduroMotors.ViewModels.FlashMessageModel '.
Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.TempDataSerializer.EnsureObjectCanBeSerialized (item item)