wake-up-neo.com

Benutzerdefinierte Validierung von ASP.NET-Überprüfungsclient wird nicht gestartet

Dies ist mir zuvor noch nicht passiert, aber aus irgendeinem Grund werden sowohl die clientseitigen als auch die serverseitigen Validierungsereignisse nicht ausgelöst:

<asp:TextBox ID="TextBoxDTownCity" runat="server" CssClass="contactfield" />
<asp:CustomValidator ID="CustomValidator2" runat="server" EnableClientScript="true"
    ErrorMessage="Delivery Town or City required"
    ClientValidationFunction="TextBoxDTownCityClient" 
    ControlToValidate="TextBoxDTownCity"
    OnServerValidate="TextBoxDTownCity_Validate" Display="Dynamic" >
</asp:CustomValidator>

Serverseitiges Validierungsereignis:

protected void TextBoxDTownCity_Validate(object source, ServerValidateEventArgs args)
{
    args.IsValid = false;
}

Client-seitiges Validierungsereignis:

function TextBoxDCountyClient(sender, args) {
    args.IsValid = false;
    alert("test");
}

Ich dachte zumindest, die Server-Side-Validierung würde feuern, aber nein. Das ist mir noch nie passiert. Das hat mich wirklich verblüfft.

Ich habe mir die Ausgabe angesehen und ASP.NET erkennt die clientseitige Funktion:

ASP.NET-JavaScript-Ausgabe:

var ctl00_ctl00_content_content_CustomValidator2 = document.all ? document.all["ctl00_ctl00_content_content_CustomValidator2"] : document.getElementById("ctl00_ctl00_content_content_CustomValidator2");

ctl00_ctl00_content_content_CustomValidator2.controltovalidate = "ctl00_ctl00_content_content_TextBoxDTownCity";

ctl00_ctl00_content_content_CustomValidator2.errormessage = "Delivery Town or City required";

ctl00_ctl00_content_content_CustomValidator2.display = "Dynamic";

ctl00_ctl00_content_content_CustomValidator2.evaluationfunction = "CustomValidatorEvaluateIsValid";

ctl00_ctl00_content_content_CustomValidator2.clientvalidationfunction = "TextBoxDTownCityClient";

Gerenderter benutzerdefinierter Validator:

<span id="ctl00_ctl00_content_content_CustomValidator2" style="color:Red;display:none;">Delivery Town or City required</span> 

Kann jemand ein wenig Licht auf die Frage stellen, warum die Validierung auf Client- und Server-Seite nicht ausgelöst wird.

Edit: Typo habe ich in der falschen Funktion eingefügt, Problem immer noch das selbe

Nur noch ein Update zum letzten Kommentar: Wobei die TextBox nicht leer sein darf. Ich habe das getestet und es stimmt nicht. Auf einer leeren Seite hat der CustomValidator meine clientseitige Validierungsfunktion ohne einen Wert ausgelöst:

<asp:TextBox ID="TextBox1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" 
ErrorMessage="CustomValidator" ClientValidationFunction="TextBoxDAddress1Client"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
67
REA_ANDREW

Ihre CustomValidator wird nur ausgelöst, wenn die TextBox nicht leer ist.

Wenn Sie sicherstellen müssen, dass es nicht leer ist, benötigen Sie auch eine RequiredFieldValidator .

Hinweis: Wenn die Eingabesteuerung leer ist, Es werden keine Validierungsfunktionen aufgerufen und Validierung gelingt. Verwenden ein RequiredFieldValidator-Steuerelement an Der Benutzer muss Daten in die .__ eingeben. Eingabesteuerung.

EDIT:

Wenn Ihre Variable CustomValidator das Attribut ControlToValidate angibt (und Ihr ursprüngliches Beispiel dies tut), werden Ihre Validierungsfunktionen nur aufgerufen, wenn das Steuerelement nicht leer ist.

Wenn Sie nicht ControlToValidate angeben, werden Ihre Validierungsfunktionen jedes Mal aufgerufen.

Dies eröffnet eine zweite mögliche Lösung des Problems. Anstatt eine separate RequiredFieldValidator zu verwenden, können Sie das ControlToValidate-Attribut aus der CustomValidator weglassen und Ihre Validierungsfunktionen so einrichten, dass sie Folgendes ausführen:

Client Side Code (Javascript):

function TextBoxDCountyClient(sender, args) {
    var v = document.getElementById('<%=TextBoxDTownCity.ClientID%>').value;
    if (v == '') {
        args.IsValid = false;  // field is empty
    }
    else {
        // do your other validation tests here...
    }
}

Serverseitiger Code (C #):

protected void TextBoxDTownCity_Validate(
    object source, ServerValidateEventArgs args)
{
    string v = TextBoxDTownCity.Text;
    if (v == string.Empty)
    {
        args.IsValid = false;  // field is empty
    }
    else
    {
        // do your other validation tests here...
    }
}
109
LukeH

Benutze das:

<asp:CustomValidator runat="server" id="vld" ValidateEmptyText="true"/>

Um ein leeres Feld zu bestätigen.

Sie müssen nicht 2 Validatoren hinzufügen!

121
Carl Nielsen

Die clientseitige Validierung wurde in meinem Webformular überhaupt nicht ausgeführt, und ich hatte keine Ahnung, warum. Es stellte sich heraus, dass das Problem darin bestand, dass der Name der Javascript-Funktion mit der Serversteuerungs-ID identisch war. 

Also kannst du das nicht machen ...

<script>
  function vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="vld" />

Das funktioniert aber:

<script>
  function validate_vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="validate_vld" />

Ich vermute, es steht im Konflikt mit dem internen .NET Javascript?

4
Bill Gates

Haben Sie überprüft, dass für das Steuerelement, das den Beitrag zurücksetzt, die Ursachenvalidation auf tru gesetzt ist und keine Validierungsgruppe zugewiesen ist?

Ich bin nicht sicher, was sonst dieses Verhalten verursachen könnte.

3
Daniel

Stellen Sie außerdem sicher, dass Sie keine Validierungsgruppen verwenden, da die Validierung nicht ausgelöst wird, wenn die validationgroup -Eigenschaft festgelegt und nicht explizit über aufgerufen wurde

 Page.Validate({Insert validation group name here});
2
ori

Vielen Dank für diese Info zum ControlToValidate LukeH!

In meinem Code wollte ich nur sicherstellen, dass ein Textfeld A Text enthält, wenn das Textfeld B einen bestimmten Wert hat. Andernfalls kann A leer sein oder was auch immer. Das Problem mit ControlToValidate = "A" in meinem Markup wurde behoben.

Prost!

0
doddy

Die serverseitige Validierung wird nicht ausgelöst, wenn die clientseitige Validierung ungültig ist und das Postback nicht gesendet wird.

Haben Sie keine andere Bestätigung, die nicht besteht?

Die clientseitige Validierung wird nicht ausgeführt, da Sie ClientValidationFunction="TextBoxDTownCityClient" angegeben haben. Diese Funktion sucht nach einer Funktion mit dem Namen TextBoxDTownCityClient als Validierungsfunktion. Der Funktionsname sollte jedoch _____TextBoxDAddress1Client sein.

(wie du geschrieben hast)

0
Davide Vosti