J'ai le code suivant avec un RequiredFieldValidator
. Le site EnableClientScript
est définie comme "false" dans le contrôle de validation. J'ai également désactivé script dans le navigateur.
Je n'utilise PAS Page.IsValid
dans le code derrière. Pourtant, lorsque je soumets sans aucune valeur dans la zone de texte, j'obtiens error message
.
D'après les commentaires de @Dai, j'ai appris que cela peut être un problème, s'il y a un code dans le fichier Page_Load
qui est exécuté dans un postback
. Il n'y aura pas d'erreur de validation.
(Cependant, pour le gestionnaire de clic de bouton, il n'est pas nécessaire de vérifier Page.IsValid
)
if (Page.IsPostBack)
{
string value = txtEmpName.Text;
txtEmpName.Text = value + "Appended";
}
QUESTION
- Pourquoi la validation côté serveur n'intervient-elle pas avant
Page_Load
? - Pourquoi cela fonctionne-t-il bien lorsque j'utilise
Page.IsValid
? - Pouvez-vous fournir la référence d'un article qui explique cela ? (Pas quelque chose qui dit - toujours utiliser
Page.IsValid
mais quelque chose qui dit quels sont les scénarios obligatoires à utiliser.Page.IsValid
MISE À JOUR 1
Consultez le site Idées fausses sur les validateurs ASP.NET
Page.IsValid
est accessible uniquement après avoir exécutéPage.Validate()
qui est invoquée implicitement quelque part après la méthodePage_Load
. Si vous conservez toute votre logique dans un gestionnaire d'événement Page_Load (ce qui est fortement déconseillé !), appelez la fonctionPage.Validate()
avant de vérifier lePage.IsValid
.
Note : Il est conseillé de ne pas garder toute la logique dans Page_Load
. Si quelque chose doit se produire sur l'événement de clic du bouton, déplacez-le vers le gestionnaire d'événement de clic du bouton. Si quelque chose doit se produire lors de l'événement de changement d'élément sélectionné de la liste déroulante, déplacez-le vers le gestionnaire d'événements de changement d'élément sélectionné de la liste déroulante.
MISE À JOUR 2
Il semble que, nous devons ajouter If(Page.IsValid)
sur button click
également si nous utilisons un Custom Validator
avec une validation côté serveur. Voir CustomValidator ne fonctionne pas bien .
Note : La question de la validation côté client est présente ici : Utilisation de Page_IsValid ou Page_ClientValidate() (pour les événements côté client)
MARKUP
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
alert('haiii');
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ValidationSummary runat="server" ID="vsumAll" DisplayMode="BulletList" CssClass="validationsummary" ValidationGroup="ButtonClick" />
<asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="valEmpName" runat="server" ControlToValidate="txtEmpName"
EnableClientScript="false" ErrorMessage="RequiredFieldValidator" Text="*" Display="Dynamic"
ValidationGroup="ButtonClick"></asp:RequiredFieldValidator>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="ButtonClick" />
</div>
</form>
</body>
</html>
CODE BEHIND
protected void Button1_Click(object sender, EventArgs e)
{
string value = txtEmpName.Text;
SubmitEmployee(value);
}
Références :
2 votes
stackoverflow.com/questions/1039465/
0 votes
@MassimilianoPeluso Cette question est similaire mais ne traite pas du même problème. Il est dit "appeler Page.IsValid même si aucun contrôle de validation n'est présent sur la page". Mais j'ai des contrôles de validation dans ma page
1 votes
Vous devez nous montrer votre logique de code. Selon la façon dont vous avez écrit votre code, il peut être nécessaire ou non de vérifier
IsValid
. Par exemple, si votre logique se trouve dans un gestionnaire de clics sur un bouton qui n'est invoqué que si la page est valide, alors l'optionIsValid
est effectuée en coulisses, mais si votre logique est en cours d'exécution, il est possible d'effectuer des vérifications.Page_Load
gardé parif( IsPostback ); Validate(); if( IsValid )
alors vous devez vraiment vérifier la propriété.0 votes
Pouvez-vous me dire ce que je dois clarifier pour répondre pleinement à votre (vos) question(s) ? Je pensais que la réponse fournie couvrait vos questions, mais peut-être que quelque chose doit être clarifié ?
0 votes
@JTorres Pouvez-vous fournir la référence d'un article qui explique cela ? (Pas quelque chose qui dit - toujours utiliser Page.IsValid ; mais quelque chose qui indique quels sont les scénarios obligatoires à utiliser.
Page.IsValid
2 votes
Il n'existe pas de scénario obligatoire pour savoir quand utiliser
Page.IsValid
-- votre logique le dicte, comme je l'ai indiqué dans ma réponse. Le seul ordre obligatoire des opérations est quePage.Validate
doit être appelé (soit par vous, soit par un contrôle lors d'un postback) avant d'interroger le fichierPage.IsValid
. Vous devez seulement vérifierPage.IsValid
si votre logique exige que la page soit valide pour pouvoir continuer. Ceci étant dit, vous ne devez JAMAIS compter sur le fait qu'un événement ne se déclenche pas si la page n'est pas valide, et ne jamais supposer que "si j'arrive ici, la page doit être valide".