Управление ASP.NET DataSource “не имеет именованного контейнера” исключением

MSDN:

хеш-функция А должна иметь следующие свойства:

  • , Если два объекта выдерживают сравнение как равные, GetHashCode, метод для каждого объекта должен возвратить то же значение. Однако, если два объекта не выдерживают сравнение как равные, эти GetHashCode, методы для этих двух объектов не должны возвращать различные значения.
  • GetHashCode метод для объекта должен последовательно возвращать тот же хэш-код, пока нет никакой модификации к объектному состоянию, которое определяет возвращаемое значение объекта Equals метод. Обратите внимание, что это верно только для текущего выполнения приложения, и что различный хэш-код может быть возвращен, если приложение запущено снова.
  • Для лучшей производительности, хеш-функция должна генерировать случайное распределение для всего входа.

Взятие это во внимание исправляет путь:

return str1.GetHashCode() ^ str2.GetHashCode() 

^ может быть заменен с другой коммутативной операцией

5
задан Sam Schutte 16 November 2009 в 20:10
поделиться

3 ответа

Книги О'Рейли «Сначала голова» написаны очень хорошо. Взгляните на Head First Java и Head First Design Patterns.

Страница

DropDownFilter

Repeater

UserControl X

ObjectDataSource

ControlParameters, ссылающиеся на DropDownFilter

End ObjectDataSource

End UserControl X

End Repeater

Конечная страница

Итак, как вы можете видеть, внутри Repeater ItemTemplate находился пользовательский элемент управления, который, в свою очередь, имел «виновный» ObjectDataSource с ControlParameters. Эти параметры управления имели имя фильтра DropDownList на родительской странице, на которую ссылаются (так что в основном, если этот элемент управления был добавлен на любую другую страницу, он, конечно, не смог бы найти элемент управления с правильным именем).

Итак, когда я прошел и изменил все ControlParameters на Parameters (удалил ссылку на этот элемент управления DropDownList), теперь я больше не получаю ошибку.

Все, что я могу предположить, это то, что тот факт, что этот источник данных ссылался на элемент управления на родительской странице, означал, что у него возникли проблемы с добавлением обратно в элемент управления страницы, установленный в DataBind (). Вы могли подумать, что он потерпит неудачу в первый раз, если он вообще выйдет из строя, так что это все еще загадка.

Есть мысли?

3
ответ дан 14 December 2019 в 08:53
поделиться

Рэй попал в самую точку. Вы определенно где-то упускаете «if (! IsPostBack)». Как вы добавляете пользовательский элемент управления в ретранслятор? Это динамично? Вы говорите, что это в ItemTemplate, поэтому, вероятно, нет ... Но несколько вызовов Page_Load подразумевают несколько копий элемента управления.

1
ответ дан 14 December 2019 в 08:53
поделиться

Это исключительная ошибка в ASP.NET DataControls. У меня была похожая проблема, и я потерял несколько месяцев из-за этой эксцентричной ошибки, но наконец нашел решение. Причина в том; Чтобы отображать элементы в ItemTemplate, мы должны использовать серверный элемент управления в LayoutTemplate, чтобы действовать как заполнитель для ItemTemplate. Например, мы могли бы использовать элемент управления Table / Div со свойством ID в шаблоне макета. Во время выполнения этот элемент управления-заполнитель будет заменен содержимым ItemTemplate, и «ошибка контейнера именования» исчезнет. Наконец, если у вас есть objectDataSource в ItemTemplate, убедитесь, что вы добавили что-то (например, table / Div) со свойством «Id» в шаблоне макета.

Спасибо, Сунил.

2
ответ дан 14 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: