0

在 ASP.NET 网页上,我有一个 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>

如您所见,页面上有两个文本框可以输入我选择的最早和最晚日期。这些文本框在 EntityDataSource 的 Where 子句中用作 ControlParameters。

现在想象有人在其中一个 ControlParameter 文本框中输入了一个无效日期,例如“32/01/2010”。

我知道我可以首先在客户端进行验证(使用 ASP.NET 验证器),因此如果输入无效,我会阻止回发。

但是如何在服务器端实现更重要的“最终”验证?特别是我在哪里(哪个方法或事件)实现它以防止 EntityDataSource 在文本框中使用无效的 DateTime 值执行查询?

基本上我的想法是调用类似Page.Validate()然后的东西Page.IsValid,如果 IsValid 返回 false,则“取消”EntityDataSource 查询执行(或完全阻止它启动)。但我不知道我可以在何处或在哪个事件中连接到 EntityDataSource 以防止查询执行。

也许我在思考错误的方向。有人知道该怎么做吗?

提前感谢您的帮助!

4

1 回答 1

2

检查有效性不是 EntityDataSource 的责任。当页面上有“保存”按钮时,单击按钮后面的代码可以检查Page.IsValid. 当您使用标准 ASP.NET 控件(如 GridView)时,这些控件会Page.IsValid为您调用。

So in your situation, I'd go with ASP.NET validation controls on the page. They will also run on the server side.

[Update]

You can hook-up a method to the EntityDataSource.Selecting event and set the Cancel property of the EntityDataSourceSelectingEventArgs to true when the page is not valid.

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