0

ASP.NET Web ページには、EntityDataSource があります。

<asp:EntityDataSource ID="EntityDataSourceOrders" runat="server" 
        ConnectionString="name=EntitiesContext"
        DefaultContainerName="EntitiesContext" 
        EntitySetName="Order" 
        Select="it.OrderID,it.OrderCode,it.OrderDateTime"
        Where="it.OrderDateTime &gt;= @DateTimeFrom AND it.OrderDateTime &lt;= @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>

ご覧のとおり、ページには 2 つのテキストボックスがあり、選択対象の最も早い日付と最も遅い日付を入力できます。これらの Textboxes は、EntityDataSource の Where 句で ControlParameters として使用されます。

ここで、誰かが ControlParameter テキストボックスの 1 つに「32/01/2010」のような無効な日付を入力したとします。

最初はクライアント側で (ASP.NET バリデーターを使用して) 検証できることを認識しているので、入力が無効な場合はポストバックを防止します。

しかし、サーバー側でより重要な「最終」検証を実装するにはどうすればよいですか? 特に WHERE (どのメソッドまたはイベント) を実装して、EntityDataSource がテキストボックスで無効な DateTime 値を使用してクエリを実行しないようにしますか?

基本的に私の考えは、次のようなものを呼び出しPage.Validate()Page.IsValidIsValid が false を返す場合は、EntityDataSource クエリの実行を「キャンセル」する (またはまったく開始しないようにする) ことでした。しかし、どこで、どのイベントで EntityDataSource に接続して、クエリの実行を防ぐことができるかわかりません。

たぶん、私は間違った方向に考えています。誰かが何をすべきか考えていますか?

助けてくれてありがとう!

4

1 に答える 1

2

有効性を確認するのは EntityDataSource の責任ではありません。ページに「保存」ボタンがある場合、ボタンのクリックの背後にあるコードでPage.IsValid. GridView などの標準の ASP.NET コントロールを操作している場合、これらのコントロールが必要Page.IsValidになります。

したがって、あなたの状況では、ページに ASP.NET 検証コントロールを使用します。それらはサーバー側でも実行されます。

[アップデート]

メソッドをEntityDataSource.Selectingイベントに接続し、ページが有効でない場合に のCancelプロパティEntityDataSourceSelectingEventArgsを true に設定できます。

private void EntityDataSourceOrders_Selecting(
    object sender, EntityDataSourceSelectingEventArgs e)
{
    e.Cancel = !this.Page.IsValid;
}
于 2010-02-23T14:55:47.887 に答える