powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC Core странности при попытке сохранения списка в TempData[...]
15 сообщений из 15, страница 1 из 1
MVC Core странности при попытке сохранения списка в TempData[...]
    #39955645
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При сохранении простых данных типа строк и чисел никаких проблем не возникает. Однако сложные объекты типа экземпляров классов требуют сериализации и десериализации. Соответствующим образом должны быть прописаны необходимые сервисы в startup.cs. И проблем с сохранением экземпляров классов не возникает - всё работает как и должно. Фрагменты кода:
Контроллер:
Код: c#
1.
2.
3.
            
     Main1 teacher = teachersList[0];    // Берём экземпляр из списка
     TempData["teacher"] = JsonConvert.SerializeObject(teacher); // Сериализуем


Представление:
Код: c#
1.
2.
3.
4.
@{
    ViewData["Title"] = "Home Page";
    Main1 teacher = JsonConvert.DeserializeObject<Main1>(TempData["teacher"].ToString());
}


В конце кода представления ставим необходимый оператор:

Код: c#
1.
2.
3.
@{
    TempData.Keep();
}


И всё работает нормально!

Однако, если я в качестве объекта беру список, то сериализация и десериализация проходят нормально, но браузер перестаёт переходить по очередному адресу перехода, если в представлении присутствует TempData.Keep(). Убираю его - переходы происходят нормально, но данные теряются!!!
То есть список и Keep() как-то "не любят" друг друга. Пробовал список упрятать в класс и сохранять экземпляр этого класса со списком внутри, но тоже ничего не получилось
Вот фрагмент кода со списком внутри класса:
Контроллер:
Код: c#
1.
2.
3.
4.
5.
6.
            List<Main1> teachersList = new List<Main1>();
            teachersList = qry.ToList();    // Результат запроса к БД

            Main1WithList mn1List = new Main1WithList();    // Экземпляр класса со списком внутри
            mn1List.ListMain1 = teachersList;
            TempData["mn1List"] = JsonConvert.SerializeObject(mn1List);



Представление:
Код: c#
1.
2.
3.
4.
5.
@{
    ViewData["Title"] = "Home Page";

    Main1WithList mn1List = JsonConvert.DeserializeObject<Main1WithList>(TempData["mn1List"].ToString());
}


Ну и

Код: c#
1.
2.
3.
@{
    TempData.Keep();
}



Сериализация и десериализация проходят нормально, однако попытка перехода по любому адресу закачивается плачевно (см. картинку). Браузер любой. Убираю Keep() - переход есть, но нет данных (что ожидаемо).
В чём проблема?
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39956113
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у тебя кто поставщик для TempData? кука или сессия7
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965419
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
у тебя кто поставщик для TempData? кука или сессия7


А чёрт его знает, скорее всего куки. Вот что в startup.cs

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
           services.AddDistributedMemoryCache();

            services.AddSession(options =>
            {
                // Set a short timeout for easy testing.
                options.IdleTimeout = TimeSpan.FromSeconds(10);
                options.Cookie.HttpOnly = true;
                // Make the session cookie essential
                options.Cookie.IsEssential = true;
            });

.....................................................................................................

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
    /* Классы расширения для обеспечения процессов сериализации и десериализации
     * для сложных объектов типа экземпляров класса
     * В контроллере:
     * TempData["UserData"] = JsonConvert.SerializeObject(searchedStory);
     * В представлении:
     * @{
     *     var story = JsonConvert.DeserializeObject<UserData>(TempData["UserData"].ToString());
     *  }
     * В самом конце кода представления необходимо иметь оператор:
     * @{
     *    TempData.Keep();
     *  }
     *  Для предачи простых объектов типа одиночной строки, числа ничего этого не требуется
     */
    public static class TempDataExtensions
    {
        public static void Set<T>(this ITempDataDictionary tempData, string key, T value)
        {
            string json = JsonConvert.SerializeObject(value);
            tempData.Add(key, json);
        }

        public static T Get<T>(this ITempDataDictionary tempData, string key)
        {
            if (!tempData.ContainsKey(key)) return default(T);

            var value = tempData[key] as string;

            return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
        }
    }



Простые типы данных и классы - все нормально, а списки и ещё обнаружил, что HtmlString не поддерживаются этой лабудой.
С уважением ВВГ
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965494
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я даже и не знал, что такое (TempData) есть. Всем прибывающим с десктопа следует первым делом написать себе маркером на лбу, что веб-приложения они stateless по своей сути, и любые способы присобачить к ним какой-либо state это ужасные костыли и путь к проблемам.
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965510
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Я даже и не знал, что такое (TempData) есть. Всем прибывающим с десктопа следует первым делом написать себе маркером на лбу, что веб-приложения они stateless по своей сути, и любые способы присобачить к ним какой-либо state это ужасные костыли и путь к проблемам.


Не, TempData нужна для обработки, например, некоторых кейсов при работе с HTML формами. Stateless это про REST, на классические веб-формы лучше не натягивать.
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965522
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/app-state?view=aspnetcore-3.1#tempdata
по умолчанию кука и ее размер ограничен у тебя данные не выходят за размер?
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965531
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Stateless это про REST, на классические веб-формы лучше не натягивать.

Классические веб-формы лучше вообще никуда не натягивать. Это как раз и есть идиотская попытка натянуть парадигму и шаблоны десктопа на веб. Интересно, скольким разработчикам, перешедшим на веб с десктопа, они мозг изувечили.
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965545
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

Уважаемые коллеги!
Спасибо за обсуждение.
С уважением ВВГ
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965547
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Stateless это про REST, на классические веб-формы лучше не натягивать.

Классические веб-формы лучше вообще никуда не натягивать. Это как раз и есть идиотская попытка натянуть парадигму и шаблоны десктопа на веб. Интересно, скольким разработчикам, перешедшим на веб с десктопа, они мозг изувечили.

да где ты был в далеком 2009 когда мс выкатил асп формы) вот в те бородатые года мне казалось эт заебись если честно, но потому когда ui становился толще пришло осознание что меня мягко говоря обманули. а потом вышел рор с мвц парадигмой и все изменилось.
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965548
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оо забыл написать еще до выхода мвц мы уже начали шлепать через хендеры и свой модельбиндер чтоб портянику не делатб так как модель форм и апдейт панелей был прям жуть жирный
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965552
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
да где ты был в далеком 2009 когда мс выкатил асп формы)

Какой 2009, они года с 2000 существуют, с самой первой версии .NET. У меня по ним то ли в 2002, то ли 2003 году уже сертификат от МС был. "Классическое" ASP при всем своем уродства реализации (VBScript) и то было на порядок более "веб-кошерно", чем формсы.
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965554
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
handmadeFromRu
да где ты был в далеком 2009 когда мс выкатил асп формы)

Какой 2009, они года с 2000 существуют, с самой первой версии .NET. У меня по ним то ли в 2002, то ли 2003 году уже сертификат от МС был. "Классическое" ASP при всем своем уродства реализации (VBScript) и то было на порядок более "веб-кошерно", чем формсы.

хз по мне с 2000 что было эт трешак, для меня формы эт с 3.5 фрейма только заиграли
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965625
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
хз по мне с 2000 что было эт трешак, для меня формы эт с 3.5 фрейма только заиграли

Тогда МВЦ уже был и даже уже не самой первой версии.
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965627
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
оо забыл написать еще до выхода мвц мы уже начали шлепать через хендеры и свой модельбиндер чтоб портянику не делатб так как модель форм и апдейт панелей был прям жуть жирный

В принципе, ихможно было разумно использовать для сценариев где требуется только отрисовка и если писать все на своих компонентах. Но все эти постбеки, евенты, вьюстейты это все мать дьявола.
...
Рейтинг: 0 / 0
MVC Core странности при попытке сохранения списка в TempData[...]
    #39965661
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Stateless это про REST, на классические веб-формы лучше не натягивать.

Классические веб-формы лучше вообще никуда не натягивать. Это как раз и есть идиотская попытка натянуть парадигму и шаблоны десктопа на веб. Интересно, скольким разработчикам, перешедшим на веб с десктопа, они мозг изувечили.


Ну почему же? Если у вас сайт, который создан преимущественно для отображения контента, то для какой-нибудь формы обратной связи вкорячивать REST не имеет смысла. Веб-формы отлично подходят. Они просты, надёжны и работают даже при отключенном JS, т.е. вы сможете отправить своё сообщение, даже с кофеварки. Иногда это имеет смысл.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC Core странности при попытке сохранения списка в TempData[...]
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]