We are updating the DevExpress product documentation website and this page is part of our new experience. During this transition period, product documentation remains available in our previous format at documentation.devexpress.com. Learn More...

Implement Property Value Validation in the Application Model

In this lesson, you will learn how to check whether or not a property value satisfies a particular rule. For this purpose, the DemoTask.Status property and the MarkCompleted Action will be used. This action should not be executed if the current task status is "NotStarted". Thus, the rule will be checked when executing the MarkCompleted Action.

Invoke the Model Editor for the MySolution.Module project. Navigate to the Validation | Rules node. It already contains child nodes that define the rules to be checked. For example, it may contain the "RuleRequiredField for Position.Title" rule that was implemented in the Implement Property Value Validation in Code (XPO) lesson. To add a new rule that checks specific criteria, right-click the Rules node and select Add... | RuleCriteria.

Note

The descriptions of all available rule types are available in the Validation Rules topic.

For the newly created node, set the TargetType to "MySolution.Module.BusinessObjects.DemoTask", and set the Criteria property to "Status != 'NotStarted'". Set the ID property to "TaskIsNotStarted", TargetContextIDs to "MarkCompleted" and CustomMessageTemplate to "Cannot set the task as completed because it has not started".

Note

The Criteria property value must be specified using the Criteria Language Syntax. To simplify this task, you can invoke the Filter Builder dialog by clicking the ellipsis button () to the right of the Criteria value. Within this dialog, you can visually design a criteria expression.

The TargetContextIDs property is set to "MarkCompleted". This means that the rule will be checked when executing the Action whose ValidationContexts property is set to "MarkCompleted". So, set the Mark Completed Action's ValidationContexts property (in the ActionDesign | Actions | Task.MarkCompleted node) to "MarkCompleted".

Note

You can also use the Save or Delete contexts, which are available by default. Rules with these contexts are validated when an object is saved or deleted, respectively (see Validation Rules).

Run the WinForms or ASP.NET application. Assign the "Not Started" value to the Status property of one of the existing DemoTask objects. Click the MarkCompleted button. The following Validation Error dialog will be displayed.

Note

Generally, you can add the required rule to a class or property in code (see Implement Property Value Validation in Code (EF \ XPO)). The approach defined above is useful when the class sources are inaccessible.

You can see the changes made in this lesson in the Model Editor invoked for the Model.DesignedDiffs.xafml file located in the Main Demo | MainDemo.Module project. The MainDemo application is installed in %PUBLIC%\Documents\DevExpress Demos 18.2\Components\eXpressApp Framework\MainDemo by default. The ASP.NET version is available online at http://demos.devexpress.com/XAF/MainDemo/.