ObjectDataSource,CustomValidators和DataBinding

时间:2010-02-17 01:54:48

标签: c# asp.net

我有一个绑定到GridView的ObjectDataSource。该对象接受来自TextBox的参数。我遇到的问题是当我使用带有ServerValidate事件的CustomerValidator时,尽管客户验证器返回false,ObjectDataSource仍会尝试执行DataBind。

以下是ASPX页面中的代码。

<asp:TextBox ID="sittingDate" runat="server" />
<asp:CustomValidator ID="DateValidator" runat="server" ControlToValidate="sittingDate" OnServerValidate="DateValidator_ServerValidate" />
<asp:ObjectDataSource ID="BatchDataSource" runat="server" OldValuesParameterFormatString="original_{0}"
        SelectMethod="GetOrCreateSittingBatch" TypeName="BatchBLL" OnSelected="BatchDataSource_Selected" OnSelecting="BatchDataSource_Selecting">
        <SelectParameters>
            <asp:ControlParameter ControlID="sittingDate" Name="batchDate" PropertyName="Text"
                Type="DateTime" />
        </SelectParameters>
    </asp:ObjectDataSource>
<asp:GridView ID="BatchGridView" runat="server" DataSourceID="BatchDataSource">

在我有的自定义验证器中

protected void DateValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
        //Ensure that the entered data is a date.
        string input = args.Value;

        DateTime result;
        args.IsValid = DateTime.TryParse(input.TrimEnd(), out result);
}

如果验证失败,如何从数据绑定中停止ObjectDataSource?

2 个答案:

答案 0 :(得分:3)

void BatchDataSource_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
    if(!Page.IsValid)
        e.Cancel = true;
}

答案 1 :(得分:0)

尝试执行Page.Validate,然后检查Page.IsValid是否阻止数据绑定,如:

this.Page.Validate();
if (this.Page.IsValid)
{
   ...
}

您可以将此添加到Page_Load事件或可能在ObjectDataSource的OnDataBinding事件中,以防止在Page.IsValid为false时绑定数据。