На мой взгляд, у вас есть как минимум три варианта.
- Вы можете создать пользовательский элемент управления повторителя, который наследует System.Web.UI.WebControls.Repeater и переопределить поведение привязки данных, чтобы сделать его более понятным при попытке выполнения (вероятно, при сбое привязки данных без ошибок). Затем вы можете легко заменить все экземпляры стандартного повторителя на новый.
- Вы можете отфильтровать источники данных перед привязкой данных, чтобы удалить элементы, которые, как вы знаете, могут вызвать проблемы заранее. Этот вариант может быть довольно трудоемким и что-то вроде итеративного процесса.
- Вы можете попробовать добавить значения по умолчанию к бизнес-объектам, чтобы привязываемые свойства возвращали экземпляр по умолчанию, а не ноль (тоже не приятно).
Это все равно мои мысли.
Один вопрос - вы говорите «когда имущество отсутствует». Вы имеете в виду, что он использует стиль синтаксиса привязки данных, который не предлагает проверки во время компиляции и ссылается на свойства, которые не существуют, или ссылается на свойства, которые являются нулевыми?
Редактировать
ОК, так что вы ссылаетесь на свойства, которые являются нулевыми. Если у вас есть доступ к коду для бизнес-объектов, вы можете изменить их, чтобы они возвращали новый ненулевой экземпляр (это третий вариант, который я дал).
Вы не говорите, используете ли вы .net 3.5, но я предполагаю, что вы используете. Вы можете добавить новое свойство «IsValidForDataBinding» для каждого из ваших бизнес-объектов. В логике получения вы можете проверить каждое из необходимых свойств и подобъектов, чтобы проверить правильность, ненулевое значение и т. Д. И вернуть bool. Когда вы захотите связать свой повторитель, напишите простой оператор linq, который отфильтровывает недопустимые элементы (т.е. где IsValidForDataBinding = false). Сказав это, я все еще думаю, что написание производного элемента управления повторителем может быть вашим самым простым вариантом.