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?
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:
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
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;
}
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é.
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!
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.