2010-02-17 3 views
3

J'ai une ObjectDataSource qui est liée à un GridView. L'objet accepte un paramètre d'un TextBox. Le problème que j'ai est quand j'utilise un CustomerValidator avec un événement ServerValidate, l'ObjectDataSource essaierait toujours d'exécuter un DataBind malgré le fait que le validateur client a renvoyé false.ObjectDataSource, CustomValidators et DataBinding

Ce qui suit est le code dans la page 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"> 

Dans la mesure Validator je

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); 
} 

Comment puis-je arrêter la ObjectDataSource de liaison de données lors de la validation a échoué?

Répondre

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

Merci cela a beaucoup aidé. Cependant dans ma situation puisque je faisais un contrôle de conversion de type, j'ai dû modifier le paramètre select de à sinon, lorsque des données non valides étaient entrées, une exception de type était levée avant l'appel de l'événement BatchDataSource_Selecting. –

0

Essayez d'effectuer Page.Validate puis vérifier si le Page.IsValid pour empêcher la liaison de données comme:

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

Vous pouvez ajouter à votre événement Page_Load ou en peut-être dans votre cas OnDataBinding de ObjectDataSource pour prévenir la liaison de données si la page.IsValid est false.

+2

Comment empêcher la liaison de données dans l'événement DataBinding de l'objet ObjectDataSource? Il n'y a que EventArgs sans propriété .Cancel. –