2009-09-01 12 views
2

でSQLを実行する前に、私は(簡潔にするために簡略化)典型的な方法でデータソースにバインドされたデータグリッドを持っている:検証日付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> 

...

私も持っていますコードが背後にこれに似ているtxtDateFrom

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

上のカスタムバリデータ:

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

} 

しかし、これはうまくいかないようです!私が日付フィールドにガベージを入力すると、無効な日付トークンを解析するASPエラーが発生します。

検証が失敗した場合、どのSQLを起動するのを停止できますか?任意の助けを事前に

おかげ

ライアン

答えて

2
(私はいくつかの点ではisValidページをチェックする必要がある疑いがあるが、datasource_Selectingイベントでこれをしようとする私の努力が動作するようには思えません)

SqlDataSource.Selectingイベントでこれを処理し、キャンセルを呼び出すことができます。

Selectingイベントを処理 にイベントハンドラデリゲートを追加することで、あなたは 必要な追加の前処理 を実行するか、完全にデータベースクエリ をキャンセルすることができます。 SqlDataSourceSelectingEventArgsクラス が SqlDataSourceCommandEventArgsクラスから派生しているので、 あなたはtrueにCancelプロパティを設定することにより、 保留 にSqlDataSourceデータベースのクエリをキャンセルすることができます。 あなたが調べて のCommandTextを操作することができ、コレクション、 と 前Commandプロパティによって公開されたDbCommandオブジェクト にアクセス ことによって、クエリを実行する他のデータベースクエリのプロパティをパラメータ。 によって、 がSelectメソッドに渡されるDataSourceSelectArgumentsオブジェクトを調べることもできます。

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

0

これを達成するもう一つの方法は、このCompareValidatorを使用することです:

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

このバリデータは、組み込みの日付の検証操作を持っており、ページがすべてになるまで処理を継続することができません。バリデーションは成功します。