При разработке приложения ASP.NET Forms, если вы работаете в контексте ASP.NET Forms инфраструктуры и объектов между загрузка страницы и обратная передача, вы будете в безопасности. Хотя иногда сложно обойтись без добавления пользовательского кода. Обработка этого в коде — лучшее место для этого, для динамического добавления элементов управления на страницу.
Когда вы удаляете элемент управления, ViewState должен обновляться автоматически, так как вы используете метод ASP.NET Forms непосредственно в элементе управления, когда вы вызываете parent.Controls.Remove("ID")
. В случае, если вы настраиваете имена элементов управления, вам нужно будет предоставить все идентификаторы или имена самостоятельно, чтобы они были различны для страницы. Итак, здесь я предполагаю, что у вас есть пользовательское имя элемента управления, и вы знаете, что на самом деле поставить вместо "ID"
.
ViewState обычно прозрачен для вас в том, что касается кодирования. Иногда вы можете вручную очищать ViewState между постбэками (like for a form with a password, when every visit to the page you need to clear the value
). ViewState также можно изменить на off
, поэтому подумайте, нужны ли вашему приложению дополнительные накладные расходы для ViewState. В динамических формах я бы сделал все возможное, чтобы добавить элементы управления или привязку данных к пользовательским источникам данных в коде позади. Причина заключается в регистрации сценариев на стороне клиента, поэтому среда ASP.NET Forms знает о сценариях, а обработка пользовательского атрибута id или схем именования на стороне клиента может быть затруднена для отладки или обработки из обязательная точка зрения.
Я лично интегрировал приложение ASP.NET Forms с AngularJS 1.6, и хотя это было сложнее и требовало большей настройки, чем с < strong>ASP.NET MVC, это все еще было возможно и предложило мне хороший способ создания динамических форм руками ASP.NET. Однако для обратной привязки к значениям формы в коде позади требуется поиск и выборка значений из Request.Form Collection
. Если сделать это таким образом, если ваша форма является внешней по отношению к ASP.NET, для этих объектов отсутствует ViewState.
Обновляет ли это ViewState, чтобы я мог просто уменьшить свой счетчик на 1 и перенумеровать оставшиеся элементы управления с 0 на 3, или мне нужно отслеживать, какой из них был удален, и сохранять нумерацию 0, 1, 3, 4?
Что касается стратегии, которую вы здесь упоминаете, пример кода будет наиболее полезным. Я должен сделать много предположений, чтобы предположить, что может произойти. Я мог бы сказать вам, что все в порядке, но вы все равно могли упустить что-то, влияющее на результат в ваших личных результатах. При удалении строки автоматически обновляется ViewState. Что касается отслеживания вашей схемы нумерации того, как вы называете свои идентификаторы элементов управления с различными значениями, я бы лично не оставлял пробелы в числах, поэтому придерживайтесь 0 to 3
, и это упростит ваш код, и вы не нужно будет отслеживать столько в коде позади, иначе это не повлияет на вашу логику рендеринга. Таким образом, элементы управления уникальным образом привязываются к исходному коду во время постбэка, и вы можете легко перебирать коллекции элементов управления, не беспокоясь о схемах именования.
person
Ryan Mauldin
schedule
27.10.2017