2010-11-08 15 views
0

Ma précédente impression de RequiredFieldValidator et similaire a été qu'ils vous montrent une étiquette d'erreur et définissez Page.IsValid false et c'est tout. Ce qui signifie qu'ils laissent le reste de la tâche (empêchant l'utilisation de mauvaises données d'entrée) pour vous. Mais aujourd'hui j'ai réalisé que si vous utilisez un DetailsView pour insérer un nouvel enregistrement dans une base de données, et que vous utilisez des validateurs pour vérifier les TextBox dans DetailsView, ils empêchent automatiquement la mise à jour de la base de données.Comment RequiredFieldValidator arrête-t-il automatiquement la mise à jour de la base de données?

Je voudrais savoir comment cela est implémenté derrière la scène. Je suppose qu'il a interrompu l'événement Page Lifecycle at Validator.PreRender, de sorte que les connexions de base de données à un stade ultérieur n'ont pas pu être atteintes? J'ai probablement tort.

J'essaie d'utiliser Reflector pour entrer dans le RequiredFieldValidator pour voir comment il est implémenté, mais je ne sais pas vraiment où chercher. Quelqu'un peut-il donner quelques conseils?

Répondre

1

Cet article explique la validation en détail pour ASP.NET.

http://msdn.microsoft.com/en-us/library/aa479045.aspx

La validation peut être à la fois côté serveur et/ou côté client. Si elle est utilisée, la validation côté client ne permet pas à l'utilisateur de soumettre le formulaire tant qu'il n'est pas validé. La validation côté client est implémentée en utilisant JavaScript et DOM. Chaque bouton de soumission est câblé par le framework pour vérifier la validation avant de poster.

La validation côté serveur fonctionne différemment. La chaîne d'événements est étendue entre le chargement de la page et l'appel de la procédure événementielle. Les résultats de la validation sont définis, ce qui peut être interprété par n'importe quelle procédure événementielle.

Dans votre situation, je suppose que vous avez la validation du client sur - ce qui empêche le formulaire d'être envoyé au serveur et c'est pourquoi aucune mise à jour de la base de données n'est effectuée.

EDIT: Le contrôle DetailsView prend en charge les contrôles de validation côté serveur. Suivez ce lien pour plus de détails http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.aspx#security

+0

Bonjour, J'avais désactivé javascript dans mon navigateur et la validation côté serveur était responsable de la prévention automatique de la mise à jour de la base de données. – Aperture

+0

Dans ce cas, la propriété DataView.EnableModelValidation doit être définie sur True. Si vous le définissez sur False, la validation devrait cesser de fonctionner. – Faheem

+0

Bonjour, j'ai désactivé EnableModelValidation et la base de données n'était toujours pas mise à jour, ce qui signifie que EnableModelValidation n'est pas responsable de cela. – Aperture