asp.net CustomValidator non si attiva mai OnServerValidate

Ho la seguente pagina ASP:

<asp:Content ID="Content2" ContentPlaceHolderID="ShellContent" runat="server">
    <form runat="server" id="AddNewNoteForm" method="post"">

        <fieldset id="NoteContainer">
            <legend>Add New Note</legend>
            <asp:ValidationSummary ID="ValidationSummary1" runat="server" />
            <div class="ctrlHolder">
                <asp:Label ID="LabelNoteDate" runat="server" Text="Note Date" 
                    AssociatedControlID="NoteDateTextBox"></asp:Label>
                <asp:TextBox ID="NoteDateTextBox" runat="server" class="textInput" 
                    CausesValidation="True" ></asp:TextBox>
                <asp:CustomValidator 
                        ID="CustomValidator1" 
                        runat="server" 
                        ErrorMessage="CustomValidator" 
                        ControlToValidate="NoteDateTextBox" 
                        OnServerValidate="CustomValidator1_ServerValidate" 
                        Display="Dynamic" 
                        >*</asp:CustomValidator>
            </div>
            <div class="ctrlHolder">
                <asp:Label ID="LabelNoteText" AssociatedControlID="NoteTextTextBox" runat="server" Text="Note"></asp:Label>
                <asp:TextBox ID="NoteTextTextBox" runat="server" Height="102px" 
                    TextMode="MultiLine" class="textInput" ></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                    ErrorMessage="Note Text is Required" ControlToValidate="NoteTextTextBox">*</asp:RequiredFieldValidator>   

            </div>
            <div class="buttonHolder">
                <asp:Button ID="OkButton" runat="server" Text="Add New Note"  
                    CssClass="primaryAction" onclick="OkButton_Click"/>
                <asp:HyperLink ID="HyperLink1" runat="server">Cancel</asp:HyperLink>
            </div>
        </fieldset>
    </form>
</asp:Content>

e il codice riportato dietro la CustomValidator1_ServerValidate() metodo:

    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {

        if (string.IsNullOrEmpty(args.Value.Trim()))
        {
            args.IsValid = false;
            CustomValidator1.ErrorMessage = "Note Date is Required!";
            return;
        }

        DateTime testDate;
        if (DateTime.TryParse(args.Value, out testDate))
        {
            args.IsValid = true;
            CustomValidator1.ErrorMessage = "Invalid Date!";
        }

    }

Non sembra mai convalida non importa quello che ho messo nella casella di testo…

Dovrebbe parlare questo è ASP.NET 2.0

InformationsquelleAutor Bryce Fischer | 2009-10-30



5 Replies
  1. 10

    Per usare un customvalidator, è necessario anche un requiredfieldvalidator per il controllo stesso. Basta mettere un requiredfieldvalidator per NoteDateTextBox e dovrebbe fuoco customvalidator server evento per voi.

    • Non è vero che avete bisogno di un RequiredFieldValidator per utilizzare un CustomValidator. Vedi @Campinho risposta.
  2. 15

    Quando si esegue il test se la textbox è vuota, utilizzare questo ValidateEmptyText=”true” in CustomValidator.

    Altrimenti richiesto la convalida del campo non funziona.

    • Dato un bump per questa risposta perdere la proprietà e nella mia situazione sul campo non è sempre necessaria in modo che l’accoppiamento con un requiredvalidator non era la soluzione.
  3. 7

    Per aggiungere Dan e risposta, un modo alternativo di usare un CustomValidator è:

    • Rimuovere il ControlToValidate proprietà
    • Nel OnServerValidate metodo di riferimento per il controllo, la validazione invece di utilizzare ServerValidateEventArgs.Value, ad esempio,

    Esempio

    Codice infront

    <asp:ValidationSummary runat="server" DisplayMode="BulletList" ValidationGroup="form" />
    
    <asp:TextBox runat="server" ID="_textbox"/>
    <asp:CustomValidator runat="server" 
            ErrorMessage="Please enter the secret" 
            OnServerValidate="TextBoxValidate"
            ValidationGroup="form" 
            Display="None"
            EnableClientScript="false" />
    <asp:button runat="server" OnClick="ButtonClick" Text="Press" />

    Codice dietro

    protected void ButtonClick(object sender, EventArgs e)
    {
        Page.Validate();
    
        if (Page.IsValid)
        {
            //Do something
        }
    }
    
    protected void TextBoxValidate(object sender, ServerValidateEventArgs args)
    {
        args.IsValid = _textbox.Text == "secret";
    }
    • La forma non sarà carico, se vi è un controllo di convalida che non ha la controltovalidate insieme di proprietà. Si riceverà un’eccezione.
    • non è necessario per un custom validator. Ho aggiornato la mia risposta per mostrare questo.
  4. 4

    Ho avuto un problema simile, per cui le voci vuote non sono stati convalidati; metterlo qui perché questo è ciò che ho cercato su.

    La mia soluzione è stata l’attributo: ValidateEmptyText=”true”

  5. 0

    Assicurarsi che il lettore è Visible quando si richiama la convalida. Nel mio caso, ho solo impostato un genitore di controllo per Visible durante DataBind, che era troppo tardi. Il validatore ereditato il Visible valore ed è sempre stato considerato valido.
    Questo è un requisito per qualsiasi server-side validator, dal modo in cui.

Lascia un commento