On postback, how can I add a error message to validation summary?
Dynamically create a CustomValidator control and add it directly to the Page.Validators collection.
Dim err As New CustomValidatorerr.ValidationGroup = "MyGroup"err.IsValid = Falseerr.ErrorMessage = "The password is invalid"Page.Validators.Add(err)
Unlike adding the CustomValidator to the markup, this method allows you to add any number of arbitrary error messages based on server-side business logic.
Note that you can also add it to the page directly, but there are a couple of rules to follow:
- You must add the control to the same naming container as the controls of the validation group.
- If you don't want the validation message to appear in a random position in the page, you will either have to add the validator to a specific container or you will need to supress it using a CSS class or style.
You can also create a custom class and implement IValidator, which enables you to add the message with one line of code, but this method doesn't support Validation Groups.
Per Anders Fjeldstad's suggestion, here are a set of handy extension methods.
Imports Microsoft.VisualBasicImports System.Runtime.CompilerServicesPublic Module PageExtensions <Extension()> _ Public Sub AddValidationError(ByVal p As System.Web.UI.Page, ByVal errorMessage As String) p.AddValidationError(errorMessage, String.Empty) End Sub <Extension()> _ Public Sub AddValidationError(ByVal p As System.Web.UI.Page, ByVal errorMessage As String, ByVal validationGroup As String) Dim err As New CustomValidator err.ValidationGroup = validationGroup err.ErrorMessage = errorMessage err.IsValid = False p.Validators.Add(err) End SubEnd Module
Add a custom validator and manually set it's IsValid
and ErrorMessage
properties. Sort of like this:
<asp:panel ID="ErrorsPanel" runat="server" CssClass="ErrorSummary"> <asp:CustomValidator id="CustomValidator1" runat="server" Display="None" EnableClientScript="False"></asp:CustomValidator> <asp:ValidationSummary id="ErrorSummary" runat="server" HeaderText="Errors occurred:"></asp:ValidationSummary></asp:panel>
In the code behind:
//// Update the database with the changes//string ErrorDetails;if (!Db.Update(out ErrorDetails)){ CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = ErrorDetails;}
Here's a little extension to the good idea from NightOwl888:
public class ValidationError : CustomValidator{ public ValidationError(string group, string msg) : base() { base.ValidationGroup = group; base.ErrorMessage = msg; base.IsValid = false; }}public static class PageExtensions{ public static void ErrorMessage(this Page page, string group, string msg) { page.Validators.Add(new ValidationError(group, msg)); }}
Whenever you want to issue an error message, simply call Page.ErrorMessage
; the mechanism is the same as he suggested.