2010-02-17 64 views
3

我有一個綁定到GridView的ObjectDataSource。該對象接受來自TextBox的參數。我遇到的問題是,當我使用帶有ServerValidate事件的CustomerValidator時,儘管客戶驗證器已返回false,但ObjectDataSource仍會嘗試執行DataBind。ObjectDataSource,CustomValidators和DataBinding

以下是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控件?

回答

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

謝謝,這有很大的幫助。然而,在我的情況,因爲我正在做一個類型轉換檢查,我需要修改 否則,當輸入無效數據時,會在調用BatchDataSource_Selecting事件之前拋出一個類型異常。 –

0

嘗試執行Page.Validate然後檢查Page.IsValid防止數據樣結合:

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

您可以將它添加到您的Page_Load事件或也許在你ObjectDataSource的OnDataBinding事件,以防止如果Page.IsValid爲false,則爲數據綁定。

+2

在ObjectDataSource的DataBinding事件中如何阻止數據綁定?只有沒有.Cancel屬性的EventArgs。 –