2009-09-01 6 views
2

je une grille de données liée à une source de données de la manière typique (simplifiée par souci de concision):dates Valider avant d'exécuter sql en asp.net

<asp:SqlDataSource ID="ds" runat="server" ConnectionString="xxx" 
    ProviderName="yyy" SelectCommand="SELECT "a from A where date > ?"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="txtDateFrom" Name="fromDate" PropertyName="Value" Type="DateTime"/> 
    </SelectParameters> 

...

J'ai aussi un validateur personnalisé sur txtDateFrom

<asp:CustomValidator ID="fromDateCorrectVal" runat="server" ControlToValidate="txtDateFrom" ErrorMessage="From date is not valid" OnServerValidate="fromDateCorrectVal_ServerValidate" Display="None"/> 

Lorsque le code est derrière semblable à ceci:

protected void fromDateCorrectVal_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    DateTime parsedDate; 
    if (!DateTime.TryParse(tryDate, out parsedDate)) 
    { 
      args.IsValid = false; 
      fromDateCorrectVal.ErrorMessage = "Invalid from date"; 
    } 

} 

Mais cela ne semble pas fonctionner! Si j'entre des déchets dans le champ de date, j'obtiens une erreur ASP - l'analyse des jetons de date invalide.

Comment est-ce que je peux arrêter le SQL essayant de lancer, si la validation échoue? (Je pense que je dois vérifier la isValid page à un moment donné, mais mes efforts pour essayer ce dans le cas où datasource_Selecting ne semble pas fonctionner)

Merci d'avance pour toute aide

Ryan

Répondre

2

Vous pouvez gérer cela avec l'événement SqlDataSource.Selecting et appeler Annuler.

En ajoutant un délégué de gestionnaire d'événements à gérer l'événement Sélection, vous pouvez effectuer une pré-traitement supplémentaire nécessaire ou annuler entièrement la base de données requête . Parce que la SqlDataSourceSelectingEventArgs classe est dérivée de la classe SqlDataSourceCommandEventArgs, vous pouvez annuler une requête de base de données SqlDataSource en attente par Annuler le réglage de la propriété sur true. Vous pouvez examiner et manipuler les CommandText, collection Paramètres, et d'autres propriétés de la requête de base de données avant d'exécuter la requête par accéder à l'objet DbCommand exposé par la propriété Command. Vous pouvez également examiner l'objet DataSourceSelectArguments que est passé à la méthode Select par en accédant à la propriété Arguments.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasourceselectingeventargs.aspx

0

Une autre façon d'y arriver est d'utiliser un CompareValidator:

<asp:CompareValidator id="dateValidator" runat="server" Type="Date" Operator="DataTypeCheck" ControlToValidate="txtDateFrom" ErrorMessage="Error!" /> 

Ce validateur est doté d'un fonctionnement de validation de date et ne permettra pas à la page de poursuivre le traitement jusqu'à ce que tous les validations passent.