web-dev-qa-db-fra.com

Lors de la publication, comment puis-je ajouter un message d'erreur au résumé de validation?

Deux questions:

Lors de la publication lorsqu'un utilisateur clique sur Soumettre, comment puis-je ajouter un message d'erreur au résumé de validation?

Est-il également possible de mettre en évidence une zone de texte particulière à l'aide des contrôles de validation .net intégrés?

57
Blankman

Créez dynamiquement un contrôle CustomValidator et ajoutez-le directement à la collection Page.Validators.

Dim err As New CustomValidator
err.ValidationGroup = "MyGroup"
err.IsValid = False
err.ErrorMessage = "The password is invalid"
Page.Validators.Add(err)

Contrairement à l'ajout de CustomValidator au balisage, cette méthode vous permet d'ajouter un nombre illimité de messages d'erreur arbitraires basés sur la logique métier côté serveur.

Notez que vous pouvez également l'ajouter directement à la page, mais il y a quelques règles à suivre:

  1. Vous devez ajouter le contrôle au même conteneur de dénomination que les contrôles du groupe de validation.
  2. Si vous ne voulez pas que le message de validation apparaisse dans une position aléatoire dans la page, vous devrez soit ajouter le validateur à un conteneur spécifique, soit vous devrez le supprimer à l'aide d'une classe ou d'un style CSS.

Vous pouvez également créer un classe personnalisée et implémenter IValidator , qui vous permet d'ajouter le message avec une seule ligne de code, mais cette méthode ne prend pas en charge les groupes de validation.

Selon la suggestion d'Anders Fjeldstad, voici un ensemble de méthodes d'extension pratiques.

Imports Microsoft.VisualBasic
Imports System.Runtime.CompilerServices

Public 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 Sub

End Module
87
NightOwl888

Ajoutez un validateur personnalisé et définissez manuellement ses propriétés IsValid et ErrorMessage. Un peu comme ça:

<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>

Dans le code derrière:

//
// Update the database with the changes
//
string ErrorDetails;
if (!Db.Update(out ErrorDetails))
{
    CustomValidator1.IsValid = false;
    CustomValidator1.ErrorMessage = ErrorDetails;
}
48
user53794

Voici une petite extension de la bonne idée de 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));
    }
}

Chaque fois que vous souhaitez émettre un message d'erreur, appelez simplement Page.ErrorMessage; le mécanisme est le même qu'il a suggéré.

6
atlaste

Eh bien, tout ce que vous avez à faire est de créer un validateur personnalisé et de l'ajouter à la collection Validator de votre page, chaque fois que la condition pour le faire se présente.

CustomValidator cv = new CustomValidator();

if(condition)
{
cv.IsValid = false;
cv.ErrorMessage = "This Catalog Data already exists.";
cv.ValidationGroup = "InputList";
this.Page.Validators.Add(cv);
}

NOTE : N'oubliez pas de spécifier le ValidationGroup , sinon le message d'erreur n'est pas va être affiché malgré le validateur personnalisé ajouté à votre page. Et oui, si vous obtenez une réponse à votre 2e question ( mettant en évidence la zone de texte ) postez-la!

4
Sayan

Pour ajouter un message d'erreur sur le résumé de validation, vous pouvez utiliser la propriété EnableClientScript de ValidationSummary et les autres contrôles de validation. Définissez EnableClientScript sur false tous:

<asp:ValidationSummary
HeaderText="You must enter a value in the following fields :"
DisplayMode="BulletList"
EnableClientScript="false"
runat="server"/>

Pour mettre en surbrillance un contrôle, non, ce n'est pas possible avec les contrôles actuels.

Mais j'ai placé mes contrôles de validation près des contrôles associés, et j'ai défini leur propriété Text comme "*". Ensuite, si la validation échoue, elle apparaît près du contrôle ayant échoué.

Vous pouvez peut-être utiliser un validateur personnalisé pour mettre en surbrillance le contrôle ayant échoué. Mais vous devez écrire votre propre implémentation.

3
Canavar