Skip to main content

Data-Bound Validation and Model Errors

The form binds to an annotated model, commits pending edits before validation and maps model errors to fields. A separate dialog demonstrates automatic IDataErrorInfo feedback and switching the provider source. This folder is the complete application at this point in the course, with its own solution and port.

Run it

Requirements: .NET 10 SDK and NuGet access to Wisej-4 4.1.0. Use a Wisej development license or trial as required by your installation. No database setup or external service is needed.

cd "Validation in Wisej.NET Course/Module 5/ValidationClinic"
dotnet run -f net10.0 --urls http://localhost:5905

Open http://localhost:5905. In Visual Studio, open ValidationClinic.slnx and press F5. The project targets both net10.0-windows and net10.0, so the CLI needs -f when running.

What to try

ActionExpected result
Load valid values; set Age to 130; SaveThe Integer field rule passes, but Range rejects the bound model and the trace stops at the model stage.
Enter a name of 81 characters; SaveStringLength produces a Name field error; 80 is allowed.
Edit email and immediately press EnterEndEdit and explicit binding WriteValue run before the model checks; the typed value is checked.
Cancel; open Data-bound errors; blank Name; Check modelThe bound ErrorProvider reads IDataErrorInfo. This dialog never calls SetError or saves.
Switch source in Data-bound errorsBindToDataAndErrors receives the new BindingSource and an empty member in one call.
Load valid values, choose Fail next write, then SaveA friendly system message appears; the write count does not change. Save again to recover with the same input.
Discard grid editsRestores the last saved snapshot. Working-copy edits are not persisted automatically.

The repository starts with Ada Lovelace and Grace Hopper. Every browser session owns its own repository. Its data disappears when the session ends or the app restarts. The live trace shows which validation stage ran; the write count provides visible evidence that rejected input never called a successful write.

Design notes

Module note records the API choices and failure behavior.

The sample uses AutoValidate.EnableAllowFocusChange: errors remain visible while the user reaches another field to fix a related value. Cancel never causes validation. Save explicitly validates every relevant layer. The in-memory repository is deliberately a storage stand-in; callers own validation, as in the lesson. It checks name uniqueness and swaps the saved snapshot only after all repository checks pass.