MSDN:
хеш-функция А должна иметь следующие свойства:
- , Если два объекта выдерживают сравнение как равные,
GetHashCode
, метод для каждого объекта должен возвратить то же значение. Однако, если два объекта не выдерживают сравнение как равные, этиGetHashCode
, методы для этих двух объектов не должны возвращать различные значения.GetHashCode
метод для объекта должен последовательно возвращать тот же хэш-код, пока нет никакой модификации к объектному состоянию, которое определяет возвращаемое значение объектаEquals
метод. Обратите внимание, что это верно только для текущего выполнения приложения, и что различный хэш-код может быть возвращен, если приложение запущено снова.- Для лучшей производительности, хеш-функция должна генерировать случайное распределение для всего входа.
Взятие это во внимание исправляет путь:
return str1.GetHashCode() ^ str2.GetHashCode()
^
может быть заменен с другой коммутативной операцией
Книги О'Рейли «Сначала голова» написаны очень хорошо. Взгляните на 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 (). Вы могли подумать, что он потерпит неудачу в первый раз, если он вообще выйдет из строя, так что это все еще загадка.
Есть мысли?
Рэй попал в самую точку. Вы определенно где-то упускаете «if (! IsPostBack)». Как вы добавляете пользовательский элемент управления в ретранслятор? Это динамично? Вы говорите, что это в ItemTemplate, поэтому, вероятно, нет ... Но несколько вызовов Page_Load подразумевают несколько копий элемента управления.
Это исключительная ошибка в ASP.NET DataControls. У меня была похожая проблема, и я потерял несколько месяцев из-за этой эксцентричной ошибки, но наконец нашел решение. Причина в том; Чтобы отображать элементы в ItemTemplate, мы должны использовать серверный элемент управления в LayoutTemplate, чтобы действовать как заполнитель для ItemTemplate. Например, мы могли бы использовать элемент управления Table / Div со свойством ID в шаблоне макета. Во время выполнения этот элемент управления-заполнитель будет заменен содержимым ItemTemplate, и «ошибка контейнера именования» исчезнет. Наконец, если у вас есть objectDataSource в ItemTemplate, убедитесь, что вы добавили что-то (например, table / Div) со свойством «Id» в шаблоне макета.
Спасибо, Сунил.