Пользовательские элементы управления ASP.NET — альтернативы PostBack?
-
09-06-2019 - |
Вопрос
В своем путешествии в глубины разработки пользовательских элементов управления ASP.NET я, очевидно, разбираюсь в модели ASP.NET PostBack и в том, как она влияет на разработку элементов управления.
Я понимаю, что элементы управления не имеют «срока жизни» в ASP.NET и поэтому должны повторно инициализироваться при каждой загрузке страницы.Мы преодолеваем эту проблему, сохраняя значения/параметры объектов в ViewState.
Поэтому во многих статьях, которые я читал, предлагается не использовать PostBack, поскольку это может привести к значительным накладным расходам на странице. Я не ищу, как это отключить, я это знаю.
Я ищу:
Какие у нас есть альтернативы использованию модели PostBack для инициализации элементов управления?
Я знаю, что мы мог используйте QueryString, но это кажется ужасно запутанным и явно ненадежным.
В идеале вы могли бы дать мне обзор архитектуры/дизайна другого подхода и его плюсов и минусов.
Большое спасибо ^_^
Решение
Что ж, состояние сеанса — это серверное решение, со своей кучей проблем, с которыми придется иметь дело, если вы хотите вообще избежать ViewState.На самом деле, использование ViewState в пользовательском элементе управления - это нормально и хорошо - просто будьте разборчивы в том, что вы храните - храните только отклонения от объявленного состояния элемента управления, в любом случае не сохраняйте ничего, что вы собираетесь получить при обратной передаче (например,из вызова БД) и т.д.
Другие советы
Вам нужно где-то хранить значения, поэтому вы ограничены строкой запроса и скрытыми полями формы.Если вы связываете это с HTTP, то в основном это параметры GET или POST.
Я полагаю, вы могли бы использовать файлы cookie, но это было бы очень грязно.
Сохраните состояние вашего объекта в контексте сеанса:это перенесет бремя хранения состояния с клиента на сервер, что может быть приемлемым для небольших приложений интрасети.Для сайтов в Интернете это не сработает;
AJAX-включите ваш контроль:в этом случае укажите только изменения необходимо отправить обратно.Ключевым моментом здесь является выбор правильной структуры;видеть http://www.asp.net/ajax/ajaxcontroltoolkit/samples/ для официального подхода MS;возможны многие другие.
Если вы действительно ищете альтернативу модели PostBack, я бы предложил изучить ASP.NET MVC Framework.Я бы хотел отказаться от WebForms и делать все свои дела в MVC, но, увы, устаревший код — это tarbaby, и переписывание почти никогда не помогает, поэтому я подключаюсь дальше...
Я думаю, что вы все еще несколько неправильно понимаете элементы управления.У элементов управления возникает проблема, которую вы описываете, только при динамическом добавлении их на страницу.Если вы заранее объявляете свои элементы управления в коде aspx, они создаются вместе со страницей.