Domanda

Questo non è successo a me prima, ma per qualche ragione entrambi gli eventi lato client server e di convalida non sono stati attivati:

<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>

evento convalida sul lato server:

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

evento validazione lato client:

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

ho pensato che almeno la validazione lato server avrebbe sparato ma no. questo non mi è mai successo prima. Questo ha davvero mi ha fatto sconcertato.

Ho guardato l'output e ASP.NET è riconoscere la funzione lato client:

uscita ASP.NET JavaScript:

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";

resa di convalida personalizzata:

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

Uno può far luce sul motivo per cui sia il cliente e la validazione lato server non sarebbero sparando.

Modifica: Typo ho incollato nella funzione sbagliata, problema ancora lo stesso

Solo un altro aggiornamento per l'ultimo commento: dove per il controllo TextBox non può essere vuoto. Ho provato questo fuori e non è vero. Su una pagina vuota del CustomValidator licenziato il mio cliente validazione lato funzione bene anche senza un valore:

<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" />
È stato utile?

Soluzione

Il tuo CustomValidator viene considerata solo quando il TextBox non è vuota.

Se è necessario per garantire che non è vuota, allora avrete bisogno di un RequiredFieldValidator troppo.

  

Nota: Se il controllo di input è vuota,   nessuna funzione di validazione sono chiamati e   convalida ha esito positivo. Usare un   il controllo RequiredFieldValidator per   richiede all'utente di inserire dati nel   controllo di input.

Modifica

Se il CustomValidator di specificare l'attributo ControlToValidate (e il tuo esempio originale non), allora le funzioni di convalida saranno chiamati solo quando il controllo non è vuota.

Se non si specifica ControlToValidate allora le vostre funzioni di validazione sarà chiamato ogni volta.

Questo apre una seconda soluzione possibile al problema. Invece di utilizzare un RequiredFieldValidator separata, si può omettere l'attributo ControlToValidate dalle CustomValidator e di impostazione vostre funzioni di validazione di fare qualcosa di simile a questo:

codice lato client (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...
    }
}

codice lato server (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...
    }
}

Altri suggerimenti

Utilizzare questa:

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

Per convalidare un campo vuoto.

Non è necessario aggiungere 2 validatori!

validazione lato client non veniva eseguito a tutti sul mio modulo web e non avevo idea del perché. Si scopre che il problema era il nome della funzione JavaScript è stato lo stesso del controllo server ID.

Quindi non si può fare questo ...

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

Ma questo funziona:

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

Sto indovinando è in conflitto con interno .NET JavaScript?

Hai verificare che il controllo causando secondo palo ha CausesValidation impostata su tru e che non dispone di un gruppo di convalida ad essa assegnati?

Non sono sicuro di cosa altro potrebbe causare questo comportamento.

controllare che non si sta utilizzando gruppi di validazione come quella convalida disturbarvi fuoco se la proprietà ValidationGroup è stata impostata e non esplicitamente chiamato tramite

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

validazione lato server non viene emesso se la convalida lato client non è valido, il postback non viene inviato.

Non hai qualche altra convalida che non passa?

La validazione lato client non viene eseguito perché è stato specificato ClientValidationFunction="TextBoxDTownCityClient" e questo cercherà una funzione chiamata TextBoxDTownCityClient come funzione di validazione, ma il nome della funzione dovrebbe essere TextBoxDAddress1Client

(come hai scritto)

Grazie per queste informazioni sul ControlToValidate LukeH!

Quello che stavo cercando di fare nel mio codice era di assicurare solo che qualche campo di testo A ha un testo nel campo quando campo di testo B ha un valore particolare. In caso contrario, A può essere vuota o qualsiasi altra cosa. Come liberarsi del ControlToValidate = "A" nel mio mark up risolto il problema per me.

Cheers!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top