如果控制参数无效,如何阻止 EntityDataSource 执行查询?

发布于 2024-08-22 09:39:29 字数 1630 浏览 5 评论 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 以阻止查询执行。

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

预先感谢您的帮助!

On an ASP.NET web page I have an 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>

As you can see there are two Textboxes on the page to enter an earliest and latest date for my selection. These Textboxes are used as ControlParameters in Where-clause of the EntityDataSource.

Now imagine someone enters an invalid date like "32/01/2010" in one of those ControlParameter textboxes.

I am aware that I can validate at first on client side (using the ASP.NET validators), so I prevent a postback if the input is invalid.

But how do I implement the more important "final" validation on server side? Especially WHERE (which method or event) do I implement it to prevent the EntityDataSource to execute the query with invalid DateTime values in the Textboxes?

Basically my idea was to call something like Page.Validate() and then Page.IsValid and, if IsValid returns false, to "cancel" the EntityDataSource query execution (or prevent it to start at all). But I don't know where or in which event I can hook up into the EntityDataSource to prevent the query execution.

Perhaps I am thinking into the wrong direction. Does somebody have an idea what to do?

Thank you in advance for help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心是晴朗的。 2024-08-29 09:39:29

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

因此,在您的情况下,我会在页面上使用 ASP.NET 验证控件。它们也将在服务器端运行。

[更新]

您可以将一个方法连接到 EntityDataSource.Selecting 事件,并设置 EntityDataSourceSelectingEventArgsCancel 属性当页面无效时,code> 为 true。

private void EntityDataSourceOrders_Selecting(
    object sender, EntityDataSourceSelectingEventArgs e)
{
    e.Cancel = !this.Page.IsValid;
}

It's not the responsibility of the EntityDataSource to check for validity. When you have a 'save' button on the page, the code behind the button click can check for Page.IsValid. When you are working with standard ASP.NET controls, such as the GridView, those controls will call Page.IsValid for you.

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文