On postback, how can I add a error message to validation summary? On postback, how can I add a error message to validation summary? asp.net asp.net

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:

  1. You must add the control to the same naming container as the controls of the validation group.
  2. 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.