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 >= @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>
ご覧のとおり、ページには 2 つのテキストボックスがあり、選択対象の最も早い日付と最も遅い日付を入力できます。これらの Textboxes は、EntityDataSource の Where 句で ControlParameters として使用されます。
ここで、誰かが ControlParameter テキストボックスの 1 つに「32/01/2010」のような無効な日付を入力したとします。
最初はクライアント側で (ASP.NET バリデーターを使用して) 検証できることを認識しているので、入力が無効な場合はポストバックを防止します。
しかし、サーバー側でより重要な「最終」検証を実装するにはどうすればよいですか? 特に WHERE (どのメソッドまたはイベント) を実装して、EntityDataSource がテキストボックスで無効な DateTime 値を使用してクエリを実行しないようにしますか?
基本的に私の考えは、次のようなものを呼び出しPage.Validate()
、Page.IsValid
IsValid が false を返す場合は、EntityDataSource クエリの実行を「キャンセル」する (またはまったく開始しないようにする) ことでした。しかし、どこで、どのイベントで EntityDataSource に接続して、クエリの実行を防ぐことができるかわかりません。
たぶん、私は間違った方向に考えています。誰かが何をすべきか考えていますか?
助けてくれてありがとう!