70 votes

ASP.NET Personnalisée du programme de validation côté Client et Côté Serveur de validation de pas de tir

Ce n'est pas arrivé à moi avant, mais pour une raison quelconque le client sna server côté des événements de validation ne sont pas déclenchées:

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

La validation côté serveur de l'événement:

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

La validation côté Client de l'événement:

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

Je pensais au moins le Côté Serveur de validation feu, mais non. ce n'est jamais arrivé à moi avant. Cela m'a vraiment obtenu perplexe.

J'ai regardé à la sortie et ASP.NET c'est de reconnaître le côté client de la fonction:

ASP.NET JavaScript sortie:

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

Rendu validateur personnalisé:

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

Quelqu'un peut-il éclairer pourquoi à la fois côté client et serveur de validation ne serait pas de tir.

Edit: Faute de frappe, j'ai collé dans la mauvaise fonction, le problème reste le même

Juste une autre mise à jour pour le dernier commentaire: d'où par la zone de texte ne peut pas être vide. J'ai testé cela et il n'est pas vrai. Sur une page vierge de la CustomValidator tiré mon côté client en fonction de validation des beaux-sans valeur:

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

125voto

Carl Nielsen Points 871

Utilisez ceci:

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

Pour valider un champ vide.

Vous n'avez pas besoin d'ajouter 2 validateurs !

112voto

LukeH Points 110965

Votre CustomValidator se déclenche uniquement lorsque l' TextBox n'est pas vide.

Si vous devez vous assurer qu'il n'est pas vide, alors vous aurez besoin d'un RequiredFieldValidator trop.

Remarque: Si le contrôle d'entrée est vide, pas de fonctions de validation sont appelés et la validation réussit. L'utilisation d'un RequiredFieldValidator de contrôle de obliger l'utilisateur à entrer des données dans le contrôle d'entrée.

EDIT:

Si votre CustomValidator spécifie l' ControlToValidate d'attribut (votre exemple), alors votre de validation des fonctions ne sera appelée lorsque le contrôle n'est pas vide.

Si vous ne spécifiez ControlToValidate alors votre de validation des fonctions sera appelée à chaque fois.

Cela ouvre un deuxième solution possible au problème. Plutôt que de séparer RequiredFieldValidator, vous pouvez omettre l' ControlToValidate de l'attribut de l' CustomValidator et l'installation de vos fonctions de validation de faire quelque chose comme ceci:

// client-side
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...
    }
}

// server-side
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...
    }
}

5voto

Bill Gates Points 101

La validation côté Client n'a pas été exécutée à tous sur mon formulaire web et je n'avais aucune idée de pourquoi. Il s'avère que le problème était le nom de la fonction javascript est le même que le serveur de contrôle d'identité.

Donc vous ne pouvez pas faire cela...

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

Mais cela fonctionne:

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

Je suppose que c'conflits internes .NET Javascript?

3voto

Daniel Points 1224

Avez-vous vérifier que le contrôle de l'origine du message de retour a CausesValidation ensemble de tru et qu'il n'a pas une validation de groupe assigné à elle?

Je ne suis pas sûr de ce qui pourrait causer ce problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X