Je suis nouveau à la validation et j'ai mis en caisse un simple formulaire Web que j'essaie de valider, où je remplace la méthode EvaluateIsValid()
de la classe BaseValidator
dans le dossier App_Code. Dans cette méthode, j'obtiens l'erreur L'objet n'est pas défini sur une instance d'un objet lors de l'appel this.GetControlValidationValue()
pour définir la chaîne.L'objet de validation personnalisée n'est pas défini sur une instance
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ValidApp.Default" %>
<!DOCTYPE html>
<script runat="server">
protected void pageCvd_ServerValidate(object source, ServerValidateEventArgs args)
{
ValidApp.App_Code._Validators valid = new ValidApp.App_Code._Validators(usernameTxt.ClientID.ToString());
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="display:inline-block; width:200px;">
<asp:CustomValidator ID="pageValidatorCvd" runat="server" EnableClientScript="false" OnServerValidate="pageCvd_ServerValidate"></asp:CustomValidator>
<asp:Label ID="usernameLbl" runat="server" Text="Username:" style="width:50px; font-size:xx-small"></asp:Label>
<asp:TextBox ID="usernameTxt" runat="server" style="width:100px; font-size:xx-small"></asp:TextBox>
<br />
<asp:Label ID="passwordLbl" runat="server" Text="Password:" style="width:50px; font-size:xx-small"></asp:Label>
<asp:TextBox ID="passwordTxt" runat="server" style="width:100px; font-size:xx-small"></asp:TextBox>
</div>
<div>
<asp:Button ID="registryBtn" runat="server" OnCommand="registryBtn_Command" CommandName="" CommandArgument="" Text="Register" style="width:50px; font-size:xx-small"/>
</div>
</form>
</body>
</html>
code Derrière
namespace ValidApp.App_Code
{
public class _Validators : BaseValidator
{
private string regex;
private string errorMessage;
private string controlToValidate;
protected override bool EvaluateIsValid()
{
string value = this.GetControlValidationValue(controlToValidate);
return Regex.IsMatch(value, regex);
}
public _Validators(string controlToValidate = "", string regex = @"^[a-z0-9]{6-8}$", string errorMessage = "The Username is not valid!")
{
this.regex = regex;
this.errorMessage = errorMessage;
this.controlToValidate = controlToValidate;
bool validation = EvaluateIsValid();
}
}
}
J'ai essayé de créer ma propre validation personnalisée sur <%@ Register >
mais en vain.
Des idées où je me trompe?
L'avez-vous débogué pour vous assurer que 'controlToValidate' est réglé sur une valeur appropriée? Je soupçonne que nul n'est transmis à votre constructeur d'une manière ou d'une autre. Je ne pense pas que les webcontrols puissent même avoir des constructeurs paramétrés. – CodingGorilla
Oui, j'ai, il envoie le bon contrôle. C'est le contrôle du validateur personnalisé qu'il ne reçoit pas! – DaNet