ASP.Net: возможно ли пропустить привязку данных элемента в случае возникновения ошибки? - PullRequest
2 голосов
/ 01 июня 2009

Я использую много повторителей для различных элементов наших сайтов, и мне всегда было интересно, есть ли способ заставить повторитель пропускать элемент, если возникает исключение вместо полного сбоя страницы?

В частности, я унаследовал систему от другого разработчика, использующего аналогичную конструкцию, однако он не включил никакой проверки для своих бизнес-объектов, и если отсутствует единственное свойство, все дело в дым.

Есть предложения?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 01 июня 2009

Самое простое предложение, которое я могу предложить, - проверить достоверность данных перед их передачей в ретранслятор. Я не верю, что есть какой-то способ заставить стандартный репитер пропустить элемент данных в случае ошибки.

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

0 голосов
/ 02 июня 2009

Вы пытались использовать string.isnullorempty ("строка"), чтобы проверить значение перед ссылкой на свойство?

Вот ссылка: MSDN

0 голосов
/ 01 июня 2009

На мой взгляд, у вас есть как минимум три варианта.

  1. Вы можете создать пользовательский элемент управления повторителя, который наследует System.Web.UI.WebControls.Repeater и переопределить поведение привязки данных, чтобы сделать его более понятным при попытке выполнения (вероятно, при сбое привязки данных без ошибок). Затем вы можете легко заменить все экземпляры стандартного повторителя на новый.
  2. Вы можете отфильтровать источники данных перед привязкой данных, чтобы удалить элементы, которые, как вы знаете, могут вызвать проблемы заранее. Этот вариант может быть довольно трудоемким и что-то вроде итеративного процесса.
  3. Вы можете попробовать добавить значения по умолчанию к бизнес-объектам, чтобы привязываемые свойства возвращали экземпляр по умолчанию, а не ноль (тоже не приятно).

Это все равно мои мысли.

Один вопрос - вы говорите «когда имущество отсутствует». Вы имеете в виду, что он использует стиль синтаксиса привязки данных, который не предлагает проверки во время компиляции и ссылается на свойства, которые не существуют, или ссылается на свойства, которые являются нулевыми?

Редактировать

ОК, так что вы ссылаетесь на свойства, которые являются нулевыми. Если у вас есть доступ к коду для бизнес-объектов, вы можете изменить их, чтобы они возвращали новый ненулевой экземпляр (это третий вариант, который я дал).

Вы не говорите, используете ли вы .net 3.5, но я предполагаю, что вы используете. Вы можете добавить новое свойство «IsValidForDataBinding» для каждого из ваших бизнес-объектов. В логике получения вы можете проверить каждое из необходимых свойств и подобъектов, чтобы проверить правильность, ненулевое значение и т. Д. И вернуть bool. Когда вы захотите связать свой повторитель, напишите простой оператор linq, который отфильтровывает недопустимые элементы (т.е. где IsValidForDataBinding = false). Сказав это, я все еще думаю, что написание производного элемента управления повторителем может быть вашим самым простым вариантом.

...