Sur une page Web ASP.NET J'ai un EntityDataSource:Comment empêcher EntityDataSource d'exécuter une requête si les paramètres de contrôle ne sont pas valides?
<asp:EntityDataSource ID="EntityDataSourceOrders" runat="server"
ConnectionString="name=EntitiesContext"
DefaultContainerName="EntitiesContext"
EntitySetName="Order"
Select="it.OrderID,it.OrderCode,it.OrderDateTime"
Where="it.OrderDateTime >= @DateTimeFrom AND it.OrderDateTime <= @DateTimeTo"
OrderBy="it.SOrderCode"
StoreOriginalValuesInViewState="False" >
<WhereParameters>
<asp:ControlParameter Name="DateTimeFrom"
ControlID="TextBoxDateTimeFrom"
DbType="DateTime"
PropertyName="Text" />
<asp:ControlParameter Name="DateTimeTo"
ControlID="TextBoxDateTimeTo"
DbType="DateTime"
PropertyName="Text" />
</WhereParameters>
</asp:EntityDataSource>
Comme vous pouvez le voir, il y a deux zones de texte sur la page pour entrer une première et dernière date pour ma sélection. Ces zones de texte sont utilisées comme ControlParameters dans la clause Where de l'EntityDataSource.
Imaginez maintenant que quelqu'un entre une date invalide comme "32/01/2010" dans une de ces zones de texte ControlParameter.
Je suis conscient que je peux valider d'abord côté client (en utilisant les validateurs ASP.NET), donc j'empêche une publication si l'entrée n'est pas valide. Mais comment implémenter la validation "finale" plus importante côté serveur? Surtout où (méthode ou événement) dois-je l'implémenter pour empêcher l'EntityDataSource d'exécuter la requête avec des valeurs DateTime invalides dans les Textbox? Fondamentalement, mon idée était d'appeler quelque chose comme Page.Validate()
puis Page.IsValid
et, si IsValid renvoie false, d'annuler l'exécution de la requête EntityDataSource (ou l'empêcher de démarrer du tout). Mais je ne sais pas où et dans quel événement je peux me connecter à EntityDataSource pour empêcher l'exécution de la requête.
Peut-être que je pense dans la mauvaise direction. Est-ce que quelqu'un a une idée de ce qu'il faut faire?
Merci d'avance pour l'aide!
@Steven: Je comprends votre proposition. Mais mon problème est que je ne sais pas quoi faire si la validation échoue. Par exemple: Dans l'événement ButtonClick que vous avez mentionné, je vérifie 'Page.IsValid' et renvoie false. Et maintenant? Je veux dire maintenant à l'EntityDataSource de ne pas exécuter une requête avec ces dates non valides. (Au lieu de cela, l'utilisateur doit d'abord corriger les dates.) La seule façon dont je peux penser en ce moment est d'effacer les TextBox. Sinon, si je ne fais pas cela, la collection ControlParameter de l'EntityDataSource tire "automatiquement" les dates invalides des TextBoxes et déclenche une exception. – Slauma
J'ai mis à jour ma réponse. Je pense que cela répond à votre question. – Steven
Super! C'est exactement ce que je cherchais! Et si facile, embarrassant que je n'ai pas vu cet événement. Merci beaucoup! – Slauma