Enterprise Library 4.0 ValidationProvider Вопрос самоутверждения - PullRequest
0 голосов
/ 19 апреля 2011

Я использую элемент управления Validationprovider в первый раз.Я имел ограниченный успех, пытаясь имитировать функциональность, которую я видел в примере решения ValidationQuickStart, который поставляется с установкой Ent Lib.

Хотя мне удалось заставить значки форм отображать ошибки на основе проверок бизнес-объектовкоторые украшают свойство BO атрибутом проверки, таким как:

<NotNullValidator(MessageTemplate:="Gender must be specified.", RuleSet:="MyRule", Tag:="Gender")> _
      Public Shadows Property Gender() As String
        Get
            Return MyBase.Gender
        End Get
        Set(ByVal value As String)
            MyBase.Gender = value
        End Set
    End Property

Однако, если бы я хотел добавить редактирование к методу «SelfValidation», как бы я связал Result с элементом управления формы?

(In Self Validation)

If Me.Attornet s Nothing Then
    Dim result As New ValidationResult("Attorney selection is required", Me, Nothing, Nothing, Nothing)
    results.AddResult(result)
End If

Или я должен создать собственный ** CUSTOM VALIDATOR? ", А затем использовать его тип для украшения свойства бизнес-объекта?

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

Если элемент управления ValidationProvider не предназначен для перекрестной проверки, например, такой:

, если пользователь выбирает параметр «Да» в группе переключателей, соответствующий свойству бизнес-параметра Customer.DoYouSmokeCrack As Boolean, тоэлемент управления txtHowMuch должен быть помечен значком ErrorProvider, указывающим, что это поле является обязательным условием.

Теперь я делаю это в блоке Self Validation и, когда я добавляю объект ValidationResult вдля коллекции я установил для свойства Key значение «Explanation», чтобы графический пользовательский интерфейс мог использовать его для ручного сопоставления с нарушающим управление экраном.

Существует ли более стандартный / более эффективный способ сделать это?

1 Ответ

2 голосов
/ 20 апреля 2011

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

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

Если проверка проста и проверяет одно свойство (не делая ничего другого, например, переходя в базу данных и т. Д.), Вы можете написать собственный атрибут проверки, чтобы выполнить проверку. Во всех остальных случаях вам нужно создать бизнес-объект после того, как пользователь нажмет «Сохранить» (что вы, вероятно, будете делать в любом случае), и проверить объект в этой точке. Другими словами, вы откладываете проверку, пока пользователь не внесет свои изменения.

...