Page.IsValid revenant toujours vrai avec ValidationGroup et dynamique CustomValidator
Je suis l'ajout d'un validateur personnalisé à la page par programmation sur le clic d'un bouton, puis de la validation de la page et la vérification de la propriété IsValid de la page. mais la propriété IsValid est toujours renvoyer true. S'il vous plaît aider. voici le code. J'ai besoin d'ajouter de validation personnalisée de manière dynamique pour afficher les messages de validation de l'objet métier. Je suis en train de la propriété IsValid du validateur personnalisé pour de faux, donc j'attends la propriété IsValid de la Page pour retourner faux que bien après la validation. ne peut pas comprendre ce que je fais de mal ici.
protected void Button1_Click(object sender, EventArgs e)
{
var validator = new CustomValidator();
validator.IsValid = false;
validator.ErrorMessage = "The input is invalid";
validator.ValidationGroup = "vgCustom";
Page.Validators.Add(validator);
ValidationSummary1.ValidationGroup = "vgCustom";
Page.Validate("vgCustom");
Label1.Text = Page.IsValid ? "The Page is valid" : "The Page is Invalid";
}
et voici les balises HTML
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"/>
<asp:Button ID="Button1" runat="server" Text="Validate" OnClick="Button1_Click" />
<asp:Label ID="Label1" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
- il fonctionne si j'ajoute un validateur personnalisé à la marque et retour de faux dans "ServerValidate" gestionnaire d'événement et de définir le message d'erreur de programmation. mais je ne comprends pas quelle est la différence.
Vous devez vous connecter pour publier un commentaire.
BaseValidator.Valider la Méthode:
Donc
validator.IsValid
est réinitialisé à sa valeur par défaut (Vrai) lorsque vous appelezPage.Validate("vgCustom")
. Alors qu'avec le ServerValidateEventHandler, votre code est un paramètre IsValid surPage.Validate("vgCustom")
au lieu de le laisser être réinitialisé à la valeur par défaut. Si vous déplacezvalidator.IsValid = false
à la suite de l'appel àPage.Validate("vgCustom")
, la page n'arrive pas à valider comme prévu.Je préfère utiliser le modèle suivant si:
j'ai eu le même problème avec RequiredFieldValidator (Page.IsValid est toujours vrai)
j'ai eu un panneau, j'ai voulu montrer que lorsque la validation est faux:
il a été résolu après j'ai changé le "CausesValidation" attribut du bouton de l' "vrai" à "faux":
code derrière:
Vous devez ajouter le validationgroup le bouton pour déclencher
@James est incorrect, vous devez ajouter le
CausesValidation="true"
à votre bouton.Tout d'abord, je pense qu'il est plus facile d'ajouter le programme de validation de votre aspx, au lieu de code-behind. il sera caché de toute façon au premier abord.
Deuxième, mis OnServerValidate="myControl_OnServerValidate" attribut sur le dans votre aspx.
Ensuite, dans le code-behind de mettre en œuvre myControl_OnServerValidate(): votre code de validation, il peut définir le programme de validation.IsValid à false. Lorsque la Page est valide, il sera automatiquement regrouper la valeur de votre programme de validation, et de la Page.IsValid sera défini à false par la Page de mise en œuvre
NOTE, validation du client s'exécute, et si tout va bien sur le client, puis le serveur de validation (voir https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.aspx#Remarks)